全网整合营销服务商

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

免费咨询热线: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 


相关文章: 成都网站制作公司哪家好,四川省职工服务网是做什么用?  高防服务器租用如何选择配置与防御等级?  如何用低价快速搭建高质量网站?  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  模具网站制作流程,如何找模具客户?  图册素材网站设计制作软件,图册的导出方式有几种?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  广州建站公司哪家好?十大优质服务商推荐  购物网站制作公司有哪些,哪个购物网站比较好?  如何在IIS7中新建站点?详细步骤解析  广德云建站网站建设方案与建站流程优化指南  青岛网站建设如何选择本地服务器?  如何快速查询域名建站关键信息?  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  七夕网站制作视频,七夕大促活动怎么报名?  如何在云服务器上快速搭建个人网站?  Thinkphp 中 distinct 的用法解析  TestNG的testng.xml配置文件怎么写  网站图片在线制作软件,怎么在图片上做链接?  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  如何在局域网内绑定自建网站域名?  建站之星后台密码遗忘或太弱?如何重置与强化?  深圳网站制作的公司有哪些,dido官方网站?  网站制作说明怎么写,简述网页设计的流程并说明原因?  建站主机选哪种环境更利于SEO优化?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  宝塔面板如何快速创建新站点?  如何选购建站域名与空间?自助平台全解析  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  如何在腾讯云免费申请建站?  如何在景安服务器上快速搭建个人网站?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  视频网站制作教程,怎么样制作优酷网的小视频?  定制建站哪家更专业可靠?推荐榜单揭晓  如何用搬瓦工VPS快速搭建个人网站?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  香港服务器WordPress建站指南:SEO优化与高效部署策略  常州自助建站工具推荐:低成本搭建与模板选择技巧  网站制作大概多少钱一个,做一个平台网站大概多少钱?  如何快速打造个性化非模板自助建站?  专业商城网站制作公司有哪些,pi商城官网是哪个?  如何在Tomcat中配置并部署网站项目?  建站之星展会模版如何一键下载生成?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  高性价比服务器租赁——企业级配置与24小时运维服务  零服务器AI建站解决方案:快速部署与云端平台低成本实践  建站主机解析:虚拟主机配置与服务器选择指南  如何快速生成ASP一键建站模板并优化安全性?  成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?  导航网站建站方案与优化指南:一站式高效搭建技巧解析 

您的项目需求

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