【发布时间】:2013-03-14 17:44:21
【问题描述】:
我已经用我的 asp.net MVC 表单实现了 AnitforgeryToken,并且还在我的登录过程中添加了该属性,但是当检查失败时,我希望重定向到我的欺诈行为而不是异常页面。这可能在属性中吗????
谢谢
【问题讨论】:
标签: asp.net-mvc model-view-controller
我已经用我的 asp.net MVC 表单实现了 AnitforgeryToken,并且还在我的登录过程中添加了该属性,但是当检查失败时,我希望重定向到我的欺诈行为而不是异常页面。这可能在属性中吗????
谢谢
【问题讨论】:
标签: asp.net-mvc model-view-controller
如果您不想将[HandleError] 属性放在所有具有[ValidateAntiForgeryToken] 的操作上,您可以将自定义过滤器添加到您的全局过滤器:
在 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();
}
【讨论】: