我已经在我的ASP.NET MVC表单中实现了防伪标记(AnitforgeryToken),并在我的登录过程中添加了该属性。但是当检查失败时,我希望重定向到我的欺诈操作而不是异常页面。这种做法在该属性内可行吗?谢谢。
如果您不想在所有带有[ValidateAntiForgeryToken]
的操作上放置[HandleError]
属性,您可以向全局过滤器添加自定义过滤器:
在Global.asax文件中的Application_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;
}
}
}
ValidateAntiForgeryTokenAttribute 仅会抛出 HttpAntiForgeryException 异常。你可以使用 HandleErrorAttribute 来处理这种情况:
[HandleError(
ExceptionType = typeof(HttpAntiForgeryException),
View = "Unauthorized")]
[ValidateAntiForgeryToken]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SomeActionThatRequiresToken()
{
return View();
}