如何追踪ValidateAntiForgeryToken未提供的问题?

时间:2011-09-09 18:59:22

标签: asp.net-mvc-3

我正在查看我们的日志并遇到错误:

  

未提供所需的防伪标记或无效。

似乎其中一个开发人员可能没有将令牌添加到页面上或者没有通过AJAX调用发送它。问题是我不知道在我们的代码库中它起源于何处。它是由我们添加的[HandleError]日志代码记录的,但是我们无法知道导致这种情况的方法。

堆栈跟踪仅向我们显示以下似乎不太有用的内容:

  

在System.Web.Helpers.AntiForgeryWorker.Validate(HttpContextBase)   context,String salt)at   System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters(ControllerContext   controllerContext,IList`1过滤器,ActionDescriptor actionDescriptor)   在   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext   controllerContext,String actionName)

BaseController中的OnException方法如下所示:

protected override void OnException(ExceptionContext filterContext)
{
    Exception ex = filterContext.Exception;

    //
    // Custom logging code here was removed for brevity

    if (filterContext.Exception.Data.Contains("Description") == false)
        filterContext.Exception.Data.Add("Description", "Oops. Something went wrong!");

    //Displays a friendly error, doesn't require HandleError
    filterContext.ExceptionHandled = true;

    //Displays a friendly error, *requires* HandlError
    base.OnException(filterContext);
}

我的问题是:

有没有办法获得异常的来源,即。知道哪个控制器或源文件使用ExceptionContext抛出异常。

感谢帮助。

1 个答案:

答案 0 :(得分:0)

根据BuildStarted的响应,答案在于filterContext的RouteData属性。我有一个对象转储器,它写出了任何对象的属性,这就是我现在在日志中看到的内容。

的RouteData:

[0]:[controller,Assess]

[1]:[动作,设置]

[2]:[id,2]

所以现在我知道造成这种情况的确切方法。