重定向到HttpAntiForgeryException上的调用控制器和操作(ValidateAntiForgeryToken)

时间:2014-07-10 16:25:36

标签: c# asp.net-mvc exception-handling stack-trace antiforgerytoken

当抛出HttpAntiForgeryException时,在提交我的任何表单时,我想通过原始Controller和Action加载表单视图,将用户重定向回表单的干净版本(带有新标记)第一个地方,并显示错误消息。

我相信这会带来良好的用户体验,但我不确定是否可能或是否存在任何安全问题。

目前我正在考虑在我的BaseController中使用override void OnException(ExceptionContext filterContext),但我无法弄清楚如何,或者如果可以的话,得到触发异常的动作和控制器。该操作将是httppost版本,但与加载表单视图的原始操作具有相同的名称。

有没有办法从filterContext.Exception中的stacktrace中获取它?

或者有更好的方法吗?

或者这是一个愚蠢的想法?

非常感谢您的意见:)

这适用于MVC 4 .Net 4.0应用程序。

1 个答案:

答案 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属性。