asp.net之ExceptionFilter过滤器


本文摘自PHP中文网,作者巴扎黑,侵删。

这篇文章主要为大家详细介绍了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>();

     });

测试

在请求中抛出一个异常

日志正确捕获到异常信息

浏览器返回500错误,并且返回自定义的错误信息。

以上就是asp.net之ExceptionFilter过滤器的详细内容!

相关阅读 >>

asp.net数据绑定控件详解(图文)

asp.net core mvc中如何把二级域名绑定到特定的控制器上

学习asp.net的学习顺序与学习内容分享

关于asp.net core网站在docker中运行的详解

asp.net中webform的生命周期相关讲解

学习asp.net core 2遇到的问题分享

asp.net之ExceptionFilter过滤器

asp.net异步触发用法(ajax)

asp.net core环境设置教程(2)_实用技巧

asp.net mvc 4 中的json数据交互的方法

更多相关阅读请进入《ExceptionFilter》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...