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

时间:2018-06-18 22:08:41

标签: asp.net asp.net-mvc

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

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

1 个答案:

答案 0 :(得分:1)

让我们假设我们有以下操作,并且我们已经定义了一个自定义异常过滤器,如下所示。现在,如果未提供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;
        }
    }
}