最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

asp.net core MVC 全局过滤器之ExceptionFilter过滤器(1)

来源:懂视网 责编:小采 时间:2020-11-27 22:35:22
文档

asp.net core MVC 全局过滤器之ExceptionFilter过滤器(1)

asp.net core MVC 全局过滤器之ExceptionFilter过滤器(1):本系类将会讲解asp.net core MVC中的内置全局过滤器的使用,将分为以下章节 asp.net core MVC 过滤器之ExceptionFilter过滤器(一) asp.net core MVC 过滤器之ActionFilter过滤器(二) asp.net core MVC 过滤器之ResultFi
推荐度:
导读asp.net core MVC 全局过滤器之ExceptionFilter过滤器(1):本系类将会讲解asp.net core MVC中的内置全局过滤器的使用,将分为以下章节 asp.net core MVC 过滤器之ExceptionFilter过滤器(一) asp.net core MVC 过滤器之ActionFilter过滤器(二) asp.net core MVC 过滤器之ResultFi

本系类将会讲解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接口

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

测试

在请求中抛出一个异常

日志正确捕获到异常信息

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

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

asp.net core MVC 全局过滤器之ExceptionFilter过滤器(1)

asp.net core MVC 全局过滤器之ExceptionFilter过滤器(1):本系类将会讲解asp.net core MVC中的内置全局过滤器的使用,将分为以下章节 asp.net core MVC 过滤器之ExceptionFilter过滤器(一) asp.net core MVC 过滤器之ActionFilter过滤器(二) asp.net core MVC 过滤器之ResultFi
推荐度:
标签: 过滤器 core mvc
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top