如果这是表单的常规帖子,我可以转到 Request.Form['somevalue'] 并获取值。如果这是带有查询字符串的获取,我可以转到 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 block 。
最佳答案
AJAX 帖子没有什么神奇之处。它们只是普通的旧 HTTP。这意味着您有普通的旧式 HTTP post 值和/或普通式旧式 HTTP Get 值。
如果您没有看到它们,则可能意味着您实际上并未提交它们。
编辑:
您在原始问题中没有包含两个问题:1)这是 JSON,2)这是在 AuthorizationFilter 中(而不是操作方法)。
两者都改变了答案。由于 ASP.NET 本身并不理解 JSON post 值,因此您必须通过 Request.InputStream 解析它们。 MVC3 默认情况下有一个 JSON 模型绑定(bind)器,但 AuthorizationFilters 在模型绑定(bind)器之前执行,因此您将在执行模型绑定(bind)器之前访问事物,因此 FormsCollection 将不会被填充(Request.Form[] 将不起作用或者,因为正如我所说,asp.net 本身并不理解 JSON)。
您可能会发现通过 nuget 安装 JSON.net 可能有助于完成此任务。或者您可能只编写一个简单的解析例程,因为您确切地知道自己在寻找什么。
关于ajax - AJAC MVC3 Request 对象和原始 Ajax 数据到底在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10393250/