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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本人添下面的全过程 | 特级毛片全部免费播放器 | 成人免费片| 日麻逼 | 国产一区二区三区毛片 | 女人把扒开给男人爽的 | 久久国产精品人妻中文 | 8x8拨擦拨擦华人免费 | 成人精品一区二区三区 | 香蕉tv国产在线永久播放 | 小早川怜子视频在线观看 | 亚洲 小说 欧美 激情 另类 | 成人毛片1024你懂的 | 日韩国产成人精品视频人 | 狠狠燥| 九二淫黄大片看片 | 星星动漫在线观看免费 | 国产成+人+综合+亚洲不卡 | 日本视频在线免费播放 | 色噜噜国产精品视频一区二区 | 2021最新国产成人精品视频 | 厨房高h| jiuse在线 | 日本一区二区三区四区无限 | 男人机机桶女人机机 | 国产日韩欧美不卡www | 无码乱人伦一区二区亚洲 | 亚洲男人天堂2023 | 11 13加污女qq看他下面 | free性泰国娇小videos | 教师波多野结衣在线播放 | 精品无码乱码AV | 亚洲成综合人影院在院播放 | 翁用力的抽插 | 1769亚洲资源站365在线 | jux629三浦理惠子在线播放 | 国产精品www视频免费看 | 午夜精品久久久久久久99蜜桃 | 无码人妻丰满熟妇啪啪网不卡 | 男女一级特黄a大片 | 日韩成人免费 |