2016-03-27 7 views
1

委任ハンドラで例外をキャッチしようとしています。私が持っている私のWebApiConfig.csでキャッチしようasync webapiで動作しない

config.MessageHandlers.Add(new TestHandler1()); 

私は

public class TestHandler1 : DelegatingHandler 
{ 
    protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
    { 
     HttpResponseMessage response = null; 
     try 
     { 
      response = await base.SendAsync(request, cancellationToken); 
     } 
     catch (Exception ex) 
     { 
     } 

     return response; 
    } 
} 

の委譲ハンドラを持っている私は、委任ハンドラ内

public class DefaultController : ApiController 
{ 
    public async Task<HttpResponseMessage> Get() 
    { 
     throw new Exception(); 
    } 
} 

のコントローラキャッチを持っています捕まえられていない何故なの?

+0

を例外処理に使用しようとしているされているハンドラを委任するカスタム、必要ないよう

また次のリンクをご確認くださいHttpResponseMessage> Get() '(おそらく別の非同期メソッドへの呼び出し) –

+0

私の実際のコードでは、service.DoStuff()を呼び出す必要がありますが、例外をスローすると例外ハンドラはエラーをキャッチしません。この例は単なる単純なものでした。その例外はスローされているが、キャッチされていない例外をシミュレートしています。 – martint73

+0

例外がキャッチされていないと言ったので、少し混乱します。それは捕まえられ、それがレスポンス500を見る理由です。別のレスポンスヘッダーがありますか?あなたはTestHandler1に捕らえられていないのは間違いありません。なぜなら、それは500回の応答に変換する前に処理されているからです。 – dotnetstep

答えて

0

次のリンクをチェックアウト、その後、私はあなたが達成しようとしているのかわからないけど、場合には、それは例外をキャッチして処理するための標準的なブロックを持つことです。

http://www.asp.net/web-api/overview/error-handling/exception-handling

http://blog.karbyn.com/index.php/handling-errors-in-web-api-using-exception-filters-and-exception-handlers/

この場合、例外フィルタ属性を作成し、それを必要なレベルであるaction, controller, globalに追加します。これは例外の場合に呼び出されます。それはあなたが<タスク非同期あなた `公共の内側` await`を持っているあなたは

http://weblogs.asp.net/fredriknormen/asp-net-web-api-exception-handling

+1

ExceptionFilterAttributeを使用することを決めました。 Web APIの例外処理のリンクを読んだ後は、私が試していたように待っているbase.SendAsyncの周りをキャッチしようとしていません。ありがとう。 – martint73

関連する問題