一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - asp.net core MVC 全局過濾器之ExceptionFilter過濾器(1)

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

2020-05-14 12:30huanent ASP.NET教程

這篇文章主要為大家詳細介紹了asp.net core MVC 全局過濾器之ExceptionFilter過濾器,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本系類將會講解asp.net core MVC中的內置全局過濾器的使用,將分為以下章節

  asp.net core MVC 過濾器之ExceptionFilter過濾器(一)

  asp.net core MVC 過濾器之ActionFilter過濾器(二)

  asp.net core MVC 過濾器之ResultFilter過濾器(三)

  asp.net core MVC 過濾器之ResourceFilter過濾器(四)

  asp.net core MVC 過濾器之AuthorizationFilter過濾器(五)  

簡介

異常過濾器,顧名思義,就是當程序發生異常時所使用的過濾器。用于在系統出現未捕獲異常時的處理。

實現一個自定義異常過濾器

自定義一個全局異常過濾器需要實現IExceptionFilter接口

?
1
2
3
4
5
6
7
public class HttpGlobalExceptionFilter : IExceptionFilter
  {
    public void OnException(ExceptionContext context)
    {
      throw new NotImplementedException();
    }
  }

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
  /// <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方法如下

?
1
2
3
4
services.AddMvc(options =>
     {
       options.Filters.Add<HttpGlobalExceptionFilter>();
     });

測試

在請求中拋出一個異常

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

日志正確捕獲到異常信息

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

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/huanent/archive/2017/08/23/7420039.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 69p69国产精品 | 免费看隐私美女 | 风间由美一区二区播放合集 | 99这里只有精品视频 | bnb99八度免费影院 | 日韩高清一区二区 | a级情欲片在线观看hd | 天天做天天玩天天爽天天 | 青青久久精品国产免费看 | 韩国日本香港毛片免费 | 国产精品视频在线观看 | 99视频有精品 | 日本午夜大片免费观看视频 | 国产成人精品免费视频大全五级 | 成人国产精品一区二区不卡 | 久久九九有精品国产23百花影院 | 激情另类国内一区二区视频 | 青青草在视线频久久 | 国产精品手机视频一区二区 | 欧美性一级交视频 | 亚洲国产精品综合福利专区 | 男人捅女人漫画 | 四虎国产精品视频免费看 | 韩国女主播一区二区视频 | 白丝爆动漫羞羞动漫网站 | 日本在线视频免费看 | 亚洲成综合人影院在院播放 | 法国贵妇一级伦理hd | 性肥胖BWBWBW| 拔插拔插.com | 午夜精品久视频在线观看 | 日韩毛片在线 | 日韩中文字幕网站 | 9久久9久久精品 | 欧美成人精品福利网站 | 极品久久| 蜜桃久久久亚洲精品成人 | 久久亚洲高清观看 | 摄像头东北对白清晰 | 亚洲人影院 | 美女光屁股网站 |