全网整合营销服务商

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

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


相关文章: Swift中循环语句中的转移语句 break 和 continue  行程制作网站有哪些,第三方机票电子行程单怎么开?  如何在阿里云虚拟主机上快速搭建个人网站?  公众号网站制作网页,微信公众号怎么制作?  javascript基本数据类型及类型检测常用方法小结  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  如何访问已购建站主机并解决登录问题?  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  建站之星代理如何获取技术支持?  想学网站制作怎么学,建立一个网站要花费多少?  网站制作公司排行榜,四大门户网站排名?  如何选择域名并搭建高效网站?  建站之星安装需要哪些步骤及注意事项?  建站之星如何快速更换网站模板?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  建站主机如何选?性能与价格怎样平衡?  c++ stringstream用法详解_c++字符串与数字转换利器  唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?  如何通过VPS建站实现广告与增值服务盈利?  C++如何使用std::optional?(处理可选值)  怀化网站制作公司,怀化新生儿上户网上办理流程?  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  建站之星后台管理系统如何操作?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  开源网站制作软件,开源网站什么意思?  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何在云虚拟主机上快速搭建个人网站?  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  代购小票制作网站有哪些,购物小票的简要说明?  如何在自有机房高效搭建专业网站?  建站之星安全性能如何?防护体系能否抵御黑客入侵?  如何高效配置IIS服务器搭建网站?  电商网站制作价格怎么算,网上拍卖流程以及规则?  重庆市网站制作公司,重庆招聘网站哪个好?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  如何选择靠谱的建站公司加盟品牌?  如何通过多用户协作模板快速搭建高效企业网站?  移民网站制作流程,怎么看加拿大移民官网?  微信小程序 五星评分(包括半颗星评分)实例代码  建站之星如何取消后台验证码生成?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  魔方云NAT建站如何实现端口转发?  5种Android数据存储方式汇总  如何破解联通资金短缺导致的基站建设难题?  如何用搬瓦工VPS快速搭建个人网站?  如何在新浪SAE免费搭建个人博客?  如何续费美橙建站之星域名及服务? 

您的项目需求

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