MVC 5アプリケーションの未処理例外では、グローバルApplication_Error
イベント内のキャプチャが行われ、ErrorController
にリダイレクトされました。MVC 6のグローバルエラー処理
最後のエラーは、Global.ErrorイベントのHttpApplicationState
に追加され、コントローラで取得されます。
MVC 6にはグローバルファイルがありません。未処理の例外をキャプチャするのにIExceptionFilter
を使用します。
public class GlobalExceptionFilter : IExceptionFilter, IDisposable {
private readonly ILogger logger;
private bool _disposed;
public GlobalExceptionFilter(ILoggerFactory logger) {
if (logger == null) {
throw new ArgumentNullException(nameof(logger));
}
this.logger = logger.CreateLogger("Global Exception Filter");
}
public void OnException(ExceptionContext context) {
logger.LogError("GlobalExceptionFilter", context.Exception);
//redirect to controller
}
public void Dispose() {
if (this._disposed) {
return;
}
this._disposed = true;
}
private static int GetHttpStatusCode(Exception ex) {
if (ex is HttpResponseException) {
return (int)(ex as HttpResponseException).HttpStatusCode;
}
return (int)HttpStatusCode.InternalServerError;
}
}
OnException
でも同じことができますか? asp.netコアドキュメントから
[例外ログミドルウェアを作成する](http://stackoverflow.com/a/36922701/4270650)代わりに、組み込みの 'IApplicationBuilder.UseExceptionHandler'を使ってリダイレクトを処理します。ミドルウェアについての1つの良い点は、それがまた、かみそりのエラーをキャッチすることです。 –
http://stackoverflow.com/questions/28967183/global-error-logging-in-asp-net-mvc-6 –