2017-02-20 10 views
1

私はASP.NETコアを使用しています。私のコントローラの1人がさまざまな例外を投げるサービスを呼び出します。私は例外フィルタ(ミドルウェアではない)でそれらを処理したい。例外フィルタからのリダイレクト

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

はに公開されているため、リダイレクトに使用できます。

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

ありResult性もあるが、それはフィルタの実行後に解釈されますかどうかは知りません。これは、しかし試してみる価値はあります:

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

それが動作する場合、それはまたRedirectToActionResultまたはRedirectToRouteResultで動作するはずです。

+0

もう1つは機能しません。 'context.Exception = null;'を設定しても最初のものが動作しますが、このタイプのリダイレクトでは引数を指定することはできません - 可能でしょうか? – grokky

+0

2番目のオプションも機能します。しかし、 'context.ExceptionHandled = true;'を設定してください。 – juunas

+0

@juunasもし私がそれをしたら、それは単に空白のページをレンダリングする...奇妙な! – grokky

関連する問題