温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

asp.net中ExceptionFilter过滤器怎么用

发布时间:2021-09-13 17:33:33 来源:亿速云 阅读:152 作者:小新 栏目:编程语言

这篇文章主要为大家展示了“asp.net中ExceptionFilter过滤器怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“asp.net中ExceptionFilter过滤器怎么用”这篇文章吧。

简介

异常过滤器,顾名思义,就是当程序发生异常时所使用的过滤器。用于在系统出现未捕获异常时的处理。

实现一个自定义异常过滤器

自定义一个全局异常过滤器需要实现IExceptionFilter接口

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

IExceptionFilter接口会要求实现OnException方法,当系统发生未捕获异常时就会触发这个方法。OnException方法有一个ExceptionContext异常上下文,其中包含了具体的异常信息,HttpContext及mvc路由信息。系统一旦出现未捕获异常后,比较常见的做法就是使用日志工具,将异常的详细信息记录下来,方便修正调试。下面是日志记录的实现。  

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

测试

在请求中抛出一个异常

asp.net中ExceptionFilter过滤器怎么用

日志正确捕获到异常信息

asp.net中ExceptionFilter过滤器怎么用

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

asp.net中ExceptionFilter过滤器怎么用

以上是“asp.net中ExceptionFilter过滤器怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI