2

如果这是表单的常规帖子,我可以转到 Request.Form['somevalue'] 并获取值。如果这是一个带有查询字符串的 get,我可以转到 Request.QueryString["somevalue"] 并获取该值。

发布 ajax 请求时原始数据在哪里。我需要过滤方法中原始数据字符串中的一个值。

任何帮助将不胜感激!!

以下编辑:

public class ValidateAntiForgeryId : FilterAttribute, IAuthorizationFilter {
    public void OnAuthorization(AuthorizationContext filterContext) {
        if (filterContext == null) {
            throw new ArgumentNullException("filterContext");
        }

        Guid filterGuid;
        Guid.TryParse(filterContext.RequestContext.HttpContext.Request.Form["__sessionId"], out filterGuid);

        if (filterGuid == Guid.Empty)
            throw new AuthenticationException("Authentication failure");
        try {
            var cookieGuid = (Guid)filterContext.RequestContext.HttpContext.Items["SessionId"];
        } catch {
            throw new AuthenticationException("Authentication failure");
        }
    }

发布的数据如下所示:

{"SsnLastFour":"2222","AccountNumber":"B112233","__sessionId":"dca0a504-3c40-4118-ae19-afefb9bfc8bd"}

我需要访问过滤器内的 __sessionId 块。

4

3 回答 3

4

AJAX 帖子没有什么神奇之处。它们只是普通的旧 HTTP。这意味着您拥有普通的旧 HTTP post 值和/或普通的 HTTP Get 值。

如果您没有看到它们,则可能意味着您实际上并未提交它们。

编辑:

您在原始问题中未包含的两个问题:1)这是 JSON,以及 2)这是在 AuthorizationFilter(而不是操作方法)中。

两者都改变​​了答案。由于 ASP.NET 本身不理解 JSON 后的值,因此您必须通过 Request.InputStream 解析它们。MVC3 默认有一个 JSON 模型绑定器,但 AuthorizationFilters 在模型绑定器执行之前执行,因此您将在模型绑定器执行之前访问事物,因此不会填充 FormsCollection(Request.Form[] 不起作用或者,因为正如我所说,asp.net 本身并不理解 JSON)。

您可能会发现通过 nuget 安装 JSON.net 可能有助于完成此任务。或者您可能只是编写一个简单的解析例程,因为您确切地知道您在寻找什么。

于 2012-05-01T03:57:35.710 回答
0

您可以像在普通形式的帖子中一样接受参数值。

前任 :

$.get("User/Get", { userId : "24"} ,function(data){
  alert(data);
});

或者

$("#yourDivId").load("User/Get?userId=23");

您的操作方法应如下所示

public ActionResult Get(int userId)
{
 // you have value present in userId
  if(Request.IsAjax())
  {
     return View("Partial/MyPartialView");
  }
  return View();
}

您必须记住的一件事是,您的操作方法的参数名称应该与您的参数/查询字符串名称相同。

于 2012-05-01T03:44:19.187 回答
0

fitlerContext 有一个 ActionParameters 集合,它应该具有解析的 JSON 属性(以防万一)。这可能比解析 InputStream 更容易。

var sessionId = filterContext.ActionParameters["__sessionId"];
于 2012-07-12T20:07:29.163 回答