首页 > 解决方案 > 有没有办法从 MVC 过滤器再次运行请求

问题描述

有没有办法从 MVC 异常过滤器再次运行请求?

当我在异常过滤器中处理异常时,我想再次调用该请求。

标签: asp.netasp.net-mvc

解决方案


假设我们有以下操作,并且我们定义了一个自定义异常过滤器,如下所示。现在,如果未提供 id 或向 id 提供了字符串值,此操作将生成错误。

[CustomExceptionFilter]
public string Welcome(int id)
{
    return id.ToString();
}

现在随着动作抛出错误。以下异常过滤器将处理其余情况。我在这个异常过滤器中所做的是,这将从 RouteData 中选择控制器名称和动作名称,生成一个随机值并重定向回这个动作。

这只是我想到的一个例子,当然你可以用它尝试不同的东西。

public class CustomExceptionFilter : FilterAttribute, IExceptionFilter
{
    public void OnException(ExceptionContext filterContext)

    {
        if (!filterContext.ExceptionHandled)
        {
            var rd = HttpContext.Current.Request.RequestContext.RouteData;
            string controllerName = rd.GetRequiredString("controller");
            string actionName = rd.GetRequiredString("action");

            filterContext.Result = new RedirectResult($"/{controllerName}/{actionName}/{ new Random().Next(100, 200) }");
            filterContext.ExceptionHandled = true;
        }
    }
}

推荐阅读