全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

简介

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

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

自定义一个全局异常过滤器需要实现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错误,并且返回自定义的错误信息。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# asp.net  # core  # MVC  # 过滤器  # ExceptionFilter  # ASP.NET Core MVC中过滤器工作原理介绍  # ASP.NET Core MVC 过滤器(Filter)  # ASP.NET Core MVC 过滤器的使用方法介绍  # asp.net core MVC 过滤器之ActionFilter过滤  # ASP.NET Core MVC过滤器运行流程解析  # 自定义  # 时就  # 顾名思义  # 错误信息  # 抛出  # 大家多多  # 有一个  # 方法如下  # 包含了  # 请重试  # _env  # _loggerFactory  # IHostingEnvironment  # gt  # summary  # ILoggerFactory  # readonly  # loggerFactory  # TargetSite  # Exception 


相关文章: 宝塔建站助手安装配置与建站模板使用全流程解析  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  股票网站制作软件,网上股票怎么开户?  在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?  如何在万网ECS上快速搭建专属网站?  大型企业网站制作流程,做网站需要注册公司吗?  如何快速搭建高效简练网站?  如何制作一个表白网站视频,关于勇敢表白的小标题?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  ,有什么在线背英语单词效率比较高的网站?  昆明网站制作哪家好,昆明公租房申请网上登录入口?  Swift中swift中的switch 语句  英语简历制作免费网站推荐,如何将简历翻译成英文?  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  Java解压缩zip - 解压缩多个文件或文件夹实例  装修招标网站设计制作流程,装修招标流程?  青岛网站建设如何选择本地服务器?  威客平台建站流程解析:高效搭建教程与设计优化方案  官网网站制作腾讯审核要多久,联想路由器newifi官网  c++怎么用jemalloc c++替换默认内存分配器【性能】  建站之星2.7模板:企业网站建设与h5定制设计专题  金*站制作公司有哪些,金华教育集团官网?  焦点电影公司作品,电影焦点结局是什么?  定制建站价位费用解析与套餐推荐全攻略  微信小程序 五星评分(包括半颗星评分)实例代码  如何通过商城免费建站系统源码自定义网站主题?  网站设计制作企业有哪些,抖音官网主页怎么设置?  网站制作公司,橙子建站是合法的吗?  如何在阿里云服务器自主搭建网站?  ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?  建站主机是否等同于虚拟主机?  如何在IIS中新建站点并配置端口与物理路径?  如何在阿里云完成域名注册与建站?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  网站制作费用多少钱,一个网站的运营,需要哪些费用?  如何解决VPS建站LNMP环境配置常见问题?  设计网站制作公司有哪些,制作网页教程?  建站主机选购指南:核心配置优化与品牌推荐方案  定制建站如何定义?其核心优势是什么?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  如何用好域名打造高点击率的自主建站?  红河网站制作公司,红河事业单位身份证如何上传?  盐城做公司网站,江苏电子版退休证办理流程?  动图在线制作网站有哪些,滑动动图图集怎么做?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  高防服务器:AI智能防御DDoS攻击与数据安全保障  建站之星如何通过成品分离优化网站效率?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  如何在云主机上快速搭建网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。