重定向到调用HttpAntiForgeryException (ValidateAntiForgeryToken)的控制

本文关键字:控制 ValidateAntiForgeryToken 调用 HttpAntiForgeryException 重定向 | 更新日期: 2023-09-27 18:12:33

当HttpAntiForgeryException被抛出时,在提交我的任何表单时,我想通过加载表单视图的原始控制器和Action将用户重定向到表单的干净版本(使用新令牌),并显示错误消息。

我相信这将创造一个良好的用户体验,但我不确定这是否可能,或者是否会有任何安全问题。

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

是否有一种方法可以从filterContext.Exception中的堆栈跟踪中获得它?

还是有更好的方法?

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

非常感谢你的建议:)

重定向到调用HttpAntiForgeryException (ValidateAntiForgeryToken)的控制

我相信下面将按照您描述的方式处理异常:

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