asp.net core MVC 全局过滤器之ExceptionFilter过滤器(1
本系类将会讲解asp. core MVC中的内置全局过滤器的使用,将分为以下章节
asp. core MVC 过滤器之ExceptionFilter过滤器(一)
asp. core MVC 过滤器之ActionFilter过滤器(二)
asp. core MVC 过滤器之ResultFilter过滤器(三)
asp. core MVC 过滤器之ResourceFilter过滤器(四)
asp. core MVC 过滤器之AuthorizationFilter过滤器(五)
简介
异常过滤器,顾名思义,就是当程序发生异常时所使用的过滤器。用于在系统出现未捕获异常时的处理。
实现一个自定义异常过滤器
自定义一个全局异常过滤器需要实现IExceptionFilter接口
public class HttpGlobalExceptionFilter : IExceptionFilter { public void OnException(ExceptionContext context) { throw new NotImplementedException(); } }
IExceptionFilter接口会要求实现OnException方法,当系统发生未捕获异常时就会触发这个方法。OnException方法有一个ExceptionContext异常上下文,其中包含了具体的异常信息,HttpContext及mvc路由信息。系统一旦出现未捕获异常后,比较常见的做法就是使用日志工具,将异常的详细信息记录下来,方便修正调试。狼蚁网站SEO优化是日志记录的实现。
/// <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. core MVC中注册。找到系统根目录Startup.cs文件,修改ConfigureServices方法如下
services.AddMvc(options => { options.Filters.Add<HttpGlobalExceptionFilter>(); });
测试
在请求中抛出一个异常
日志正确捕获到异常信息
浏览器返回500错误,并且返回自定义的错误信息。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持狼蚁SEO。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程