web-dev-qa-db-ja.com

ElmahをASP.NET Web APIでセットアップする方法

多くのelmah nugetを試してみましたが、ASP.NET Web APIでは動作しませんでした。なぜ誰かが知っていますか?そのための回避策はありますか?

36
user1327991

ELMAHを使用してWEB APIの例外をキャプチャする方法は2つあります。

アクションとコントローラで発生したエラーをキャプチャする場合、つまりビジネスロジックでActionFilterAttributeを作成し、それらの例外をELMAHに記録できます。

例:

public class UnhandledExceptionFilter : ExceptionFilterAttribute {
    public override void OnException(HttpActionExecutedContext context) {
        Elmah.ErrorLog.GetDefault(HttpContext.Current).Log(new Elmah.Error(context.Exception));
    }
}

次に、そのフィルターを追加してワイヤーアップします。

public static class WebApiConfig {
    public static void Register(HttpConfiguration config) {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        config.Filters.Add(new UnhandledExceptionFilter());
    }
}

上記のアプローチでは、次のエラーは処理されません。

  • コントローラーコンストラクターからスローされる例外。
  • メッセージハンドラーからスローされた例外。
  • ルーティング中にスローされた例外。
  • 応答コンテンツのシリアル化中にスローされた例外

参照: http://blogs.msdn.com/b/webdev/archive/2012/11/16/capturing-unhandled-exceptions-in-asp-net-web-api-s-with-elmah。 aspxhttp://www.asp.net/web-api/overview/error-handling/web-api-global-error-handling

ELMAHがログに記録するにはグローバルレベルのWEB APIエラー 500のサーバーエラーがすべてキャッチされるように、次のようにします。

Nugetをインストールします: https://www.nuget.org/packages/Elmah.Contrib.WebApi/

以下をWebApiConfigに追加します

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        ...
        config.Services.Add(typeof(IExceptionLogger), new ElmahExceptionLogger());
        ...
    }
}

また、500サーバーエラーのカスタムエラーメッセージを表示する場合は、Web APIに新しいExceptionHandlerを実装できます(ExceptionLoggerとExceptionHandlerは異なることに注意してください)。

class OopsExceptionHandler : ExceptionHandler
{
    public override void HandleCore(ExceptionHandlerContext context)
    {
        context.Result = new TextPlainErrorResult
        {
            Request = context.ExceptionContext.Request,
            Content = "Oops! Sorry! Something went wrong." +
                      "Please contact [email protected] so we can try to fix it."
        };
    }

    private class TextPlainErrorResult : IHttpActionResult
    {
        public HttpRequestMessage Request { get; set; }

        public string Content { get; set; }

        public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
        {
            HttpResponseMessage response = 
                             new HttpResponseMessage(HttpStatusCode.InternalServerError);
            response.Content = new StringContent(Content);
            response.RequestMessage = Request;
            return Task.FromResult(response);
        }
    }
}

リファレンス: http://www.asp.net/web-api/overview/error-handling/web-api-global-error-handling

23
jaxxbo

1つのオプションは、カスタムExceptionFilterAttributeをセットアップし、OnExceptionメソッドをオーバーライドし、そこからElmahに信号を送ることです。以下のサンプルリンクを参照してください

Elmah WebAPIサンプル

15
cecilphillip

ElmahをWeb APIで使用する方法について詳しく説明している以下のURLを確認してください。

http://blogs.msdn.com/b/webdev/archive/2012/11/16/capturing-unhandled-exceptions-in-asp-net-web-api-s-with-elmah.aspx

以下のNuGetパッケージを使用することもできます。

Install-Package Elmah.Contrib.WebApi

使用法:

アプリケーションの起動時、またはコントローラーごとに登録するだけです。

protected void Application_Start()
{
    GlobalConfiguration.Configuration.Filters.Add(new ElmahHandleErrorApiAttribute());

    ...
}

the Elmah.Contrib.WebApi GitHub repo から)

12
Ahmed Ahmed

ASP.NET Web APIの場合は Elmah.MVC nugetパッケージを使用します。詳細は以下に記載されています

以下から取得: ASP.NET MVC 4でELMAH.MVCをセットアップする方法

Elmahとは何ですか?

ELMAHは、ASP.NET Webアプリケーションで未処理の例外をログに記録して報告することを目的としたオープンソースプロジェクトです。

Elmahを使用する理由

ELMAHは、ハンドルされていないASP.NET例外の控えめなインターセプターとして機能します。これらの例外は通常、ASP.NETで明らかになります 黄色の死の画面

Elmahを使用する理由と理由がわかったところで、Alp.NET MVCプロジェクトでElmahを使用する方法をすぐに始めましょう。

ステップ1:ソリューションを右クリックし、[Nugetパッケージの管理]オプションを選択します enter image description here

ステップ2:Nugetパッケージマネージャーで「Elmah」を検索し、 Elmah.MVC nuget拡張機能をインストールします。 enter image description here Nuget Package Managerは必要なdllをダウンロードして追加し、Elmahが実行できるようにweb.configの<appSetting>を変更しますenter image description hererK。

ステップ3:以上です!! Elmahをテストする準備ができました。 Elmahが機能するかどうかをテストするために404を生成しました。ELMAHは次のURLでアクセスできます:http://yourapp.com/elmah。 enter image description hereenter image description here

お役に立てれば :)

さらに読む:

6
Yasser Shaikh