この記事では、主に asp.net core MVC グローバル フィルターの ExceptionFilter フィルターについて詳しく紹介します。興味のある方は参考にしてください。このシリーズでは、asp.net core の組み込みグローバル フィルターの使用について説明します。 MVCは以下の章に分かれています
asp.net core MVCフィルター - ExceptionFilterフィルター(1)
asp.net core MVCフィルター - ActionFilterフィルター(2)
asp.net core MVCフィルターResultFilterフィルター(3)
asp.net core MVC フィルター ResourceFilter フィルター (4)
asp.net core MVC フィルター AuthorizationFilter フィルター (5)
はじめにException フィルターは、名前が示すように、例外が発生した場合に使用されるフィルターです。プログラム。システム内でキャッチされなかった例外を処理するために使用されます。
カスタム例外フィルターの実装
グローバル例外フィルターをカスタマイズするには、IExceptionFilter インターフェイスの実装が必要です
public class HttpGlobalExceptionFilter : IExceptionFilter { public void OnException(ExceptionContext context) { throw new NotImplementedException(); } }
/// <summary> /// 全局异常过滤器 /// </summary> public class HttpGlobalExceptionFilter : IExceptionFilter { readonly ILoggerFactory _loggerFactory; readonly IHostingEnvironment _env; public HttpGlobalExceptionFilter(ILoggerFactory loggerFactory, IHostingEnvironment env) { _loggerFactory = loggerFactory; _env = env; } public void OnException(ExceptionContext context) { var logger = _loggerFactory.CreateLogger(context.Exception.TargetSite.ReflectedType); logger.LogError(new EventId(context.Exception.HResult), context.Exception, context.Exception.Message); var json = new ErrorResponse("未知错误,请重试"); if (_env.IsDevelopment()) json.DeveloperMessage = context.Exception; context.Result = new ApplicationErrorResult(json); context.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError; context.ExceptionHandled = true; } public class ApplicationErrorResult : ObjectResult { public ApplicationErrorResult(object value) : base(value) { StatusCode = (int)HttpStatusCode.InternalServerError; } } public class ErrorResponse { public ErrorResponse(string msg) { Message = msg; } public string Message { get; set; } public object DeveloperMessage { get; set; } }
フィルターが作成されたので、asp.net core MVC に登録する必要があります。システムのルート ディレクトリで Startup.cs ファイルを見つけ、ConfigureServices メソッドを次のように変更します
services.AddMvc(options => { options.Filters.Add<HttpGlobalExceptionFilter>(); });
リクエストで例外をスローします
ログは例外情報を正しくキャプチャします
ブラウザは 500 エラーを返し、カスタマイズされたエラー情報を返します。
以上がasp.net の ExceptionFilter フィルターの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。