多くのelmah nugetを試してみましたが、ASP.NET Web APIでは動作しませんでした。なぜ誰かが知っていますか?そのための回避策はありますか?
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。 aspx & http://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
1つのオプションは、カスタムExceptionFilterAttributeをセットアップし、OnExceptionメソッドをオーバーライドし、そこからElmahに信号を送ることです。以下のサンプルリンクを参照してください
ElmahをWeb APIで使用する方法について詳しく説明している以下のURLを確認してください。
以下のNuGetパッケージを使用することもできます。
Install-Package Elmah.Contrib.WebApi
使用法:
アプリケーションの起動時、またはコントローラーごとに登録するだけです。
protected void Application_Start() { GlobalConfiguration.Configuration.Filters.Add(new ElmahHandleErrorApiAttribute()); ... }
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パッケージの管理]オプションを選択します
ステップ2:Nugetパッケージマネージャーで「Elmah」を検索し、 Elmah.MVC nuget拡張機能をインストールします。 Nuget Package Managerは必要なdllをダウンロードして追加し、Elmahが実行できるようにweb.configの<appSetting>
を変更しますrK。
ステップ3:以上です!! Elmahをテストする準備ができました。 Elmahが機能するかどうかをテストするために404を生成しました。ELMAHは次のURLでアクセスできます:http://yourapp.com/elmah。
お役に立てれば :)
さらに読む: