0

web apiで発生しているすべての例外を1か所で処理してログに記録する方法が必要です。 ExceptionLoggerとExceptionHandlerの両方のメソッドをオーバーライドしますが、コードが破損してハンドリングメカニズムをトリガーしません。ASP.NET WEB API 2:例外ハンドラとロガーがすべてのエラーを処理しない

enter image description here

私は別のエラーを引き起こす同じAPIメソッドに持っている私のコントローラを変更した場合:

enter image description here

:ハンドラがエラーをキャッチしようとしている

[RoutePrefix("api/Ads")] 
public class AdsController : ApiController 
{ 
    public IHttpActionResult Get() 
    { 
     return Ok(Ad.GetAds()); 
    } 
    public IHttpActionResult Get(object name) 
    { 
     return Ok(); 
    } 
} 

この場合のエラーは次のとおりです。

Multiple actions were found that match the request: 

上位レベルのWeb APIによって発生したエラーのみをExceptionLoggerおよびExceptionHandlerがキャッチしていますか?すべてのエラーを処理するにはどうすればよいですか?例外フィルタは追加する必要があるソリューションですか?

答えて

0

ExceptionLoggerとフィルタがすべてのエラーをキャッチされませんでした。

public class MyExceptionFilter:ExceptionFilterAttribute 
{ 
    public override void OnException(HttpActionExecutedContext context) 
    { 
     var t = HandleException(context); 

     t.Wait(); 
    } 

    public override async Task OnExceptionAsync(HttpActionExecutedContext context, CancellationToken cancellationToken) 
    { 
     await HandleException(context); 
    } 

    private Task HandleException(HttpActionExecutedContext context) 
    { 
     context.Response = context.Request.CreateErrorResponse(HttpStatusCode.InternalServerError, context.Exception.Message); 

     return Task.CompletedTask; 
    } 
} 

は、その後、あなたのWebApiConfig.Register方法でこの行を追加します。デバッグモードでは例外をスローしてそこで停止しますが、リリースモードでは例外はロガーまたはフィルタによって捕捉されます。

2

例外フィルタを追加します。プロジェクトはでは、デバッグモードであったため

config.Filters.Add(new MyExceptionFilter()); 
+0

例外フィルタは既に追加されていますが、それも機能しません。私も自分の例外を作成して投げてみましたが、例外フィルタや例外ログをトリガしませんでした。私は何かが欠けているかもしれません。 – Coding

+0

私は間違っているかもしれませんが、あなたの '複数のアクションがリクエストと一致することが判明しました:'エラーはコード内の処理によって処理されるとは思えません....本当に間違っている可能性があります。私はとにかくそれを期待しませんでした。 –

+0

はい、アクションを実行する前に既に発生しているためです。しかし、どのようなメカニズムが "新しい例外をスローする"のようなアクション自体の中にスローされたエラーを処理しないのかという疑問。 – Coding

関連する問題