最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

asp.net?core?MVC?全局過濾器之ExceptionFilter過濾器(1)

 更新時間:2022年04月27日 14:03:10   作者:huanent  
這篇文章主要為大家詳細(xì)介紹了asp.net?core?MVC?全局過濾器之ExceptionFilter過濾器,具有一定的參考價值,感興趣的小伙伴們可以參考一下

簡介

異常過濾器,顧名思義,就是當(dāng)程序發(fā)生異常時所使用的過濾器。用于在系統(tǒng)出現(xiàn)未捕獲異常時的處理。

實現(xiàn)一個自定義異常過濾器

自定義一個全局異常過濾器需要實現(xiàn)IExceptionFilter接口

public class HttpGlobalExceptionFilter : IExceptionFilter
  {
    public void OnException(ExceptionContext context)
    {
      throw new NotImplementedException();
    }
  }

IExceptionFilter接口會要求實現(xiàn)OnException方法,當(dāng)系統(tǒng)發(fā)生未捕獲異常時就會觸發(fā)這個方法。OnException方法有一個ExceptionContext異常上下文,其中包含了具體的異常信息,HttpContext及mvc路由信息。系統(tǒng)一旦出現(xiàn)未捕獲異常后,比較常見的做法就是使用日志工具,將異常的詳細(xì)信息記錄下來,方便修正調(diào)試。下面是日志記錄的實現(xiàn)。

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

注冊全局過濾器

過濾器已經(jīng)編寫完畢,接下來就需要在asp.net core MVC中注冊。找到系統(tǒng)根目錄Startup.cs文件,修改ConfigureServices方法如下

services.AddMvc(options =>
      {
        options.Filters.Add<HttpGlobalExceptionFilter>();
      });

測試

在請求中拋出一個異常

日志正確捕獲到異常信息

瀏覽器返回500錯誤,并且返回自定義的錯誤信息。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

娄烦县| 北宁市| 化州市| 姚安县| 盖州市| 北海市| 新源县| 阳山县| 云南省| 阳泉市| 伊金霍洛旗| 通化市| 洪湖市| 大足县| 博白县| 乃东县| 留坝县| 正镶白旗| 长沙市| 眉山市| 灌阳县| 皋兰县| 霍城县| 嘉鱼县| 太原市| 青龙| 汕头市| 原阳县| 宝坻区| 新邵县| 桦川县| 绥芬河市| 高雄县| 桂平市| 皮山县| 监利县| 玉门市| 乐安县| 曲水县| 太原市| 乌拉特前旗|