多くの elmah nugets を試しましたが、ASP.NET Web API では機能しませんでした。誰も理由を知っていますか?そのための回避策はありますか?
4 に答える
ELMAH を使用して WEB API で例外をキャプチャするには、2 つのオプションがあります。
Actions および Controllers で発生したエラーをキャプチャする場合、つまりビジネス ロジックで 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 support@contoso.com 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 にシグナルを送ることです。以下のサンプルリンクを参照してください
Web API で elmah を使用する方法について詳しく説明している以下の 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 は、ASP.NET Web アプリケーションで未処理の例外をログに記録して報告することを目的としたオープン ソース プロジェクトです。
エルマーを使用する理由
ELMAH は、未処理の ASP.NET 例外 (通常は ASP.NET のイエロー スクリーン オブ デス) を目立たないようにインターセプターとして機能します。
これで、Elmah を使用する対象と理由がわかったので、ASP.NET MVC プロジェクトで Elmah を使用する方法をすぐに始めましょう。
ステップ 1:ソリューションを右クリックし、[Nuget パッケージの管理] オプションを選択します。
ステップ 2: Nuget パッケージ マネージャーで「Elmah」を検索し、Elmah.MVC nuget 拡張機能をインストールします。
Nuget パッケージ マネージャーは、必要な dll をダウンロードして追加し、<appSetting>
Elmah が機能するように web.config を変更します。
ステップ 3:それだけです !! Elmah をテストする準備が整いました。Elmah が機能するかどうかをテストするために 404 を生成しました。ELMAH には次の URL からアクセスできます: http://yourapp.com/elmah。
お役に立てれば :)
参考文献 :