本文旨在:

1 继承ExceptionFilterAttribute,重写Override OnException(ExceptionContext context)处理异常

2 在.netCore中配置属性文件ExceptionFilterAttribute的构造方法注入

现在我们逐步实现以上两个功能:

1 继承ExceptionFilterAttribute,重写Override OnException(ExceptionContext context)处理异常

新建class文件,命名ExceptionHandler,继承特性ExceptionFilterAttribute,重写 OnException,处理异常,这里我封装了ReturnResult方法处理ActionResult

public class ExceptionHandle : ExceptionFilterAttribute
{
public override void OnException(ExceptionContext context)
{
var ex = context.Exception;
var controllername = context.RouteData.Values["controller"].ToString();
var actionname = context.RouteData.Values["action"].ToString(); if (context.ExceptionHandled == false)
{
context.Result= ReturnResult(resultType.ContentResult,ex);
}
context.ExceptionHandled = true; //异常已处理了
}
}

  

ReturnResult方法代码:这里总结了三种形式的输出1 ContentResult重写请求页面内容输出异常,2 JsonResult Json格式返回异常,3 Redirect页面跳转

        private IActionResult ReturnResult(resultType rtype, Exception ex)
{
IActionResult result;
switch (rtype)
{
case resultType.ContentResult:
result = new ContentResult
{
Content = ex.Message,
StatusCode = StatusCodes.Status500InternalServerError,
ContentType = "text/html;charset=utf-8"
};
break;
case resultType.JsonResult:
result = new JsonResult(new { msg = ex.Message });
break;
case resultType.Redirect:
result = new RedirectToRouteResult(
new RouteValueDictionary{
{ "controller","Home"},
{"action","Error" },
{"msg",ex.Message }
}
);
break;
default:
result = new RedirectResult("../home/error");
break;
}
return result;
}
enum resultType
{
ContentResult = 1,
JsonResult = 2,
Redirect = 3
}

  

2 使用.netCore做依赖注入,这里我们为ExceptionHandle属性文件做注入配置

startup.cs 配置服务:

    public void ConfigureServices(IServiceCollection services)
{
...
services.AddScoped<ExceptionHandle>();
}

 使用:构造方法根据需要补充参数,.netcore会自动为该传参做注入

public class ExceptionHandle : ExceptionFilterAttribute
{
private readonly ILogger<ExceptionHandle> _logger;
public ExceptionHandle(ILogger<ExceptionHandle> logger)
{
_logger = logger;
}
public override void OnException(ExceptionContext context)
{
_logger.LogError(ex.Message, context.Exception);//调用
}
}

  Action调用:ServiceFilter

[ServiceFilter(typeof(ExceptionHandle))]
public IActionResult Index(DateTime dt, long sjc)
{
var chushu = 0;
var i = 1 / chushu;
return View()
}

  

总结:定义继承自ExceptionFilterAttribute属性类的Filter文件类,重写OnException方法,如果不需要在属性类中使用其他服务当日也无需做注入,调用在Action上一行写上[AttributeName]即可

//[ServiceFilter(typeof(ExceptionHandle))] 

[ExceptionHandle]
public IActionResult Index(DateTime dt, long sjc)
{
var chushu = 0;
var i = 1 / chushu;
return View()
}

  

Asp.net Core Filter过滤器异常处理的更多相关文章

  1. Asp.Net Core Filter 深入浅出的那些事-AOP

    一.前言 在分享ASP.NET Core Filter 使用之前,先来谈谈AOP,什么是AOP 呢? AOP全称Aspect Oriented Programming意为面向切面编程,也叫做面向方法编 ...

  2. 解说asp.net core MVC 过滤器的执行顺序

    asp.net core MVC 过滤器会在请求管道的各个阶段触发.同一阶段又可以注册多个范围的过滤器,例如Global范围,controller范围等.以ActionFilter为例,我们来看看过滤 ...

  3. ASP.NET Core 使用过滤器移除重复代码

    USING ACTIONFILTERS TO REMOVE DUPLICATED CODE ASP.NET Core 的过滤器可以让我们在请求管道的特定状态之前或之后运行一些代码.因此如果我们的 ac ...

  4. ASP.NET Core MVC 过滤器介绍

    过滤器的作用是在 Action 方法执行前或执行后做一些加工处理.使用过滤器可以避免Action方法的重复代码,例如,您可以使用异常过滤器合并异常处理的代码. 过滤器如何工作? 过滤器在 MVC Ac ...

  5. ASP.NET Core MVC 过滤器

    参考网址:https://www.cnblogs.com/dotNETCoreSG/p/aspnetcore-4_4_3-filters.html ASP.NET Core有五种类型的过滤器,每个过滤 ...

  6. 十二个 ASP.NET Core 例子——过滤器

    目录: 过滤器介绍 过滤器类别 自定义过滤器和过滤特性 直接短路返回内容 过滤器与中间件的区别 如果要全局日志,不要用过滤器 官方文档传送门 1.过滤器介绍 没有权限直接返回,资源缓存,Action执 ...

  7. ASP.NET Core Filter与IOC的羁绊

    前言 我们在使用ASP.NET Core进行服务端应用开发的时候,或多或少都会涉及到使用Filter的场景.Filter简单来说是Action的拦截器,它可以在Action执行之前或者之后对请求信息进 ...

  8. asp.net Core 使用过滤器判断请求客户端是否为移动端,并实现PC端和移动端请求映射和自动跳转

    很多时候我们做网站时单纯的用bootstrap等前端框架实现的前端自适应带给用户的体验并不太好,所以为了提高用户体验会专门针对PC端网页重新设计一套移动端网页,但是怎么才能做到在移动端访问PC页面的时 ...

  9. asp.net core添加全局异常处理及log4net、Nlog应用

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 一.介绍 此篇文章将会介绍项目的全局异常收集以及采用log4net或者NLog记录. 众所周知,一旦自己的项目报错,如果没有进行处 ...

随机推荐

  1. Shell条件练习题

    Shell条件练习题 目录 Shell条件练习题 1.检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限 2.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的 ...

  2. axios请求配置

    全局配置示例(在js文件配置): axios.defaults.baseURL = 'https://api.example.com'; axios.defaults.headers.common[' ...

  3. python2批量改密码

    客户端代码: 如果注释最下面三行socket发送,可以直接在本机修改密码不发送数据到服务端. # -*- coding: utf-8 -*- #author:Guoyabin import rando ...

  4. Learning Schedules

    近期目标 1. 争取搞定小论文 2. Java SE 学习 3. 剑指Offer每日1-2题

  5. 【转】int和Integer的区别

    int和Integer的区别: 1.Integer是int的包装类,int则是java的一种基本数据类型 2.Integer变量必须实例化后才能使用,而int变量不需要 3.Integer实际是对象的 ...

  6. ubuntu改镜像源

    https://blog.csdn.net/qq_28193019/article/details/89352824

  7. [Java]Thinking in Java 练习2.2

    题目 创建一个"Hello, World"程序,用javac进行编译,再用java运行它. 程序 1 public class Ex2_2 { 2 public static vo ...

  8. [杂记]如何在ppt里插入高亮代码

    在为c语言习题课准备课件的时候发现需要向ppt内插入代码,简单的文本粘贴没有高亮,格式也很混乱需要自己慢慢调,于是自己鼓捣了一下,实现了向ppt内插入高亮代码. [所需软件]Office PowerP ...

  9. 实例演示:Excel实现数据更新获取,并根据公式计算后展示

    ​ 我们数据库中有一些明细数据,希望我们可以使用Excel的公式,对报表数据进行,最后展示在自定义的行列固定报表中. 如下图:从左侧表中获取大类名称为饮料.海鲜.日用品,从2016/11/11到201 ...

  10. 字符串压缩(一)之ZSTD

    前言 最近项目上有大量的字符串数据需要存储到内存,并且需要储存至一定时间,于是自然而然的想到了使用字符串压缩算法对"源串"进行压缩存储.由此触发了对一些优秀压缩算法的调研. 字符串 ...