我们使用angularjs($ http.post)来调用控制器。在控制器中,我们定义了一个自定义操作文件管理器属性,用于验证防伪标记。 AntiForgery.Validate在以下位置抛出一个空引用异常:在Microsoft.AspNet.Mvc.ActionFilterAttribute.d__6.MoveNext()。
我们使用的是Microsoft.AspNet.Mvc - 6.0.0-beta4
自定义属性代码如下。
public override void OnActionExecuting(ActionExecutingContext actionContext)
{
if (actionContext == null)
{
throw new ArgumentNullException("actionContext");
}
base.OnActionExecuting(actionContext);
var cookieToken = string.Empty;
var formToken = string.Empty;
string[] tokenHeaders = null;
string[] tokens = null;
if (actionContext.HttpContext.Request.Headers.TryGetValue("__RequestVerificationToken", out tokenHeaders))
{
tokens = tokenHeaders.First().Split(':');
if (tokens != null && tokens.Length == 2)
{
cookieToken = tokens[0];
formToken = tokens[1];
}
}
AntiForgery.Validate(actionContext.HttpContext, new AntiForgeryTokenSet(formToken, cookieToken));
}