当抛出HttpAntiForgeryException时,在提交我的任何表单时,我想通过原始Controller和Action加载表单视图,将用户重定向回表单的干净版本(带有新标记)第一个地方,并显示错误消息。
我相信这会带来良好的用户体验,但我不确定是否可能或是否存在任何安全问题。
目前我正在考虑在我的BaseController中使用override void OnException(ExceptionContext filterContext)
,但我无法弄清楚如何,或者如果可以的话,得到触发异常的动作和控制器。该操作将是httppost版本,但与加载表单视图的原始操作具有相同的名称。
有没有办法从filterContext.Exception中的stacktrace中获取它?
或者有更好的方法吗?
或者这是一个愚蠢的想法?
非常感谢您的意见:)
这适用于MVC 4 .Net 4.0应用程序。
答案 0 :(得分:0)
我相信以下内容将以您描述的方式处理异常:
protected override void OnException(ExceptionContext filterContext)
{
if (filterContext.Exception is HttpAntiForgeryException)
{
this.RedirectToAction(
filterContext.RouteData.Values["action"].ToString(),
filterContext.RouteData.Values);
filterContext.ExceptionHandled = true;
}
base.OnException(filterContext);
}
另一种方法是使用HandleError属性,但只允许重定向到给定视图(通常是自定义错误视图)。最后,可以通过实现IExceptionFilter接口来创建自定义HandleError属性。