ホームページ  >  記事  >  バックエンド開発  >  asp.net の ExceptionFilter フィルター

asp.net の ExceptionFilter フィルター

巴扎黑
巴扎黑オリジナル
2017-09-01 15:07:372036ブラウズ

この記事では、主に 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();
    }
  }

IExceptionFilter インターフェイスには、システムでキャッチされなかった例外が発生したときにトリガーされる OnException メソッドの実装が必要です。 OnException メソッドには、特定の例外情報、HttpContext、および mvc ルーティング情報を含む ExceptionContext 例外コンテキストがあります。システム内でキャッチされない例外が発生した場合、修正とデバッグを容易にするために、ロギング ツールを使用して例外の詳細情報を記録するのが一般的なアプローチです。以下はロギングの実装です。

  /// <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>();
      });

Test

リクエストで例外をスローします

ログは例外情報を正しくキャプチャします

ブラウザは 500 エラーを返し、カスタマイズされたエラー情報を返します。

以上がasp.net の ExceptionFilter フィルターの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。