2017-02-20 65 views
1

我正在使用ASP.NET Core。我的一个控制器调用引发各种异常的服务。我想在一个异常过滤器(不是中间件)中处理它们。从异常过滤器重定向

public class MyHandlerAttribute : ExceptionFilterAttribute 
{ 
    public override void OnException(ExceptionContext c) 
    { 
     if (c.Exception is FooException) { 
      // redirect with arguments to here 
     } 
     else if (c.Exception is FooException) { 
      // redirect with arguments to there 
     } 
     else { 
      // redirect to main error action without arguments, as 500 
     } 
     base.OnException(c); 
    } 
} 

与行动过滤器,一个异常过滤器不给我访问Controller,所以我不能做一个c.Result = controller.RedirectTo...()

那么,如何重定向到我的错误操作?

回答

4

HttpContext暴露在ExceptionContext上,因此您可以将其用于重定向。

context.HttpContext.Response.Redirect("..."); 

还有一个Result属性,但我不知道它会在过滤器执行后进行解释。这是值得一试,但:

context.Result = new RedirectResult("..."); 

如果它的工作原理,也应该与RedirectToActionResultRedirectToRouteResult工作。

+0

第二个不起作用。第一个工作,如果你也设置'context.Exception = null;'但是这种类型的重定向不允许我指定参数 - 这是可能的吗? – grokky

+0

第二个选项也适用。但是你也应该设置'context.ExceptionHandled = true;'。 – juunas

+0

@juunas如果我这样做,那么它只是呈现一个空白页...奇怪! – grokky