有没有办法从MVC异常过滤器再次运行请求?
当我在异常过滤器中处理异常时,我想再次调用请求。
答案 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;
}
}
}