【问题标题】:asp.net MVC antiforgerytoken on exception RedirectToAction异常 RedirectToAction 上的 asp.net MVC antiforgerytoken
【发布时间】:2013-03-14 17:44:21
【问题描述】:

我已经用我的 asp.net MVC 表单实现了 AnitforgeryToken,并且还在我的登录过程中添加了该属性,但是当检查失败时,我希望重定向到我的欺诈行为而不是异常页面。这可能在属性中吗????

谢谢

【问题讨论】:

    标签: asp.net-mvc model-view-controller


    【解决方案1】:

    如果您不想将[HandleError] 属性放在所有具有[ValidateAntiForgeryToken] 的操作上,您可以将自定义过滤器添加到您的全局过滤器:

    在 Global.asaxApplication_Start():

    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    

    然后:

    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
            filters.Add(new AntiForgeryTokenFilter());
        }
    }
    

    AntiForgeryTokenFilter.cs:

    public class AntiForgeryTokenFilter : FilterAttribute, IExceptionFilter
    {
        public void OnException(ExceptionContext filterContext)
        {
            if(filterContext.Exception.GetType() == typeof(HttpAntiForgeryException))
            {
                filterContext.Result = new RedirectResult("/"); // whatever the url that you want to redirect to
                filterContext.ExceptionHandled = true;
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      ValidateAntiForgeryTokenAttribute 只会抛出 HttpAntiForgeryException。您可以使用HandleErrorAttribute 来处理这种情况:

      [HandleError(
          ExceptionType = typeof(HttpAntiForgeryException), 
          View = "Unauthorized")]
      [ValidateAntiForgeryToken]
      [AcceptVerbs(HttpVerbs.Post)]
      public ActionResult SomeActionThatRequiresToken() 
      {
          return View();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-11
        • 2016-02-12
        • 2010-11-23
        • 2013-07-22
        • 2013-02-05
        • 1970-01-01
        • 2011-01-02
        相关资源
        最近更新 更多