Asp.net Core Filter过滤器异常处理
本文旨在:
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过滤器异常处理的更多相关文章
- Asp.Net Core Filter 深入浅出的那些事-AOP
一.前言 在分享ASP.NET Core Filter 使用之前,先来谈谈AOP,什么是AOP 呢? AOP全称Aspect Oriented Programming意为面向切面编程,也叫做面向方法编 ...
- 解说asp.net core MVC 过滤器的执行顺序
asp.net core MVC 过滤器会在请求管道的各个阶段触发.同一阶段又可以注册多个范围的过滤器,例如Global范围,controller范围等.以ActionFilter为例,我们来看看过滤 ...
- ASP.NET Core 使用过滤器移除重复代码
USING ACTIONFILTERS TO REMOVE DUPLICATED CODE ASP.NET Core 的过滤器可以让我们在请求管道的特定状态之前或之后运行一些代码.因此如果我们的 ac ...
- ASP.NET Core MVC 过滤器介绍
过滤器的作用是在 Action 方法执行前或执行后做一些加工处理.使用过滤器可以避免Action方法的重复代码,例如,您可以使用异常过滤器合并异常处理的代码. 过滤器如何工作? 过滤器在 MVC Ac ...
- ASP.NET Core MVC 过滤器
参考网址:https://www.cnblogs.com/dotNETCoreSG/p/aspnetcore-4_4_3-filters.html ASP.NET Core有五种类型的过滤器,每个过滤 ...
- 十二个 ASP.NET Core 例子——过滤器
目录: 过滤器介绍 过滤器类别 自定义过滤器和过滤特性 直接短路返回内容 过滤器与中间件的区别 如果要全局日志,不要用过滤器 官方文档传送门 1.过滤器介绍 没有权限直接返回,资源缓存,Action执 ...
- ASP.NET Core Filter与IOC的羁绊
前言 我们在使用ASP.NET Core进行服务端应用开发的时候,或多或少都会涉及到使用Filter的场景.Filter简单来说是Action的拦截器,它可以在Action执行之前或者之后对请求信息进 ...
- asp.net Core 使用过滤器判断请求客户端是否为移动端,并实现PC端和移动端请求映射和自动跳转
很多时候我们做网站时单纯的用bootstrap等前端框架实现的前端自适应带给用户的体验并不太好,所以为了提高用户体验会专门针对PC端网页重新设计一套移动端网页,但是怎么才能做到在移动端访问PC页面的时 ...
- asp.net core添加全局异常处理及log4net、Nlog应用
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 一.介绍 此篇文章将会介绍项目的全局异常收集以及采用log4net或者NLog记录. 众所周知,一旦自己的项目报错,如果没有进行处 ...
随机推荐
- Kubernetes GitOps 工具
Kubernetes GitOps Tools 译自:Kubernetes GitOps Tools 本文很好地介绍了GitOps,并给出了当下比较热门的GitOps工具. 简介 在本文中,将回顾一下 ...
- Solution -「FJWC 2020」人生
\(\mathcal{Description}\) OurOJ. 有 \(n\) 个结点,一些结点有染有黑色或白色,其余待染色.将 \(n\) 个结点染上颜色并连接有向边,求有多少个不同(结点 ...
- Dubbo源码剖析六之SPI扩展点的实现之getExtension
上文Dubbo源码剖析六之SPI扩展点的实现之getExtensionLoader - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中分析了getExtensionLoader,本文继续分 ...
- MyBatis功能点一:二级缓存cache
对于Mybatis缓存分作用域等维度区别一.二级缓存特点如下图: 分析缓存源码首先得找到缓存操作的入口:前面已经分析,sqlsesion.close()仅对一级缓存有影响,而update等对一/二级缓 ...
- 部署Zabbix 6.0 LTS
Blog:博客园 个人 本部署文档适用于CentOS 8.X/RHEL 8.X/Anolis OS 8.X/AlmaLinux 8.X. Zabbix 6.0 LTS于2022年2月15日发布,本次大 ...
- Windows server 2016 2019远程端口修改操作
windows server 2016 2019修改远程端口操作 一.修改3389远程端口 1,按"win+r"快捷键,在对话框中输入regedit 2, 找到路径 \HKEY ...
- 网络测试技术——802.1X TLS认证(上篇)
一.TLS认证简介 1.TLS认证 (1)认证过程 · 最安全认证技术 · 实施最复杂 (2)TLS双向证书认证 · 服务器对客户端进行认证 · 客户端对服务器进行认证 2.TLS认证过程 3.交换机 ...
- Vue UI API简单笔记
VUE UI 目录 VUE UI 一 移动端常用UI组件库 二 PC端常用UI组件库 三 ElementUI组件按需引入 一 移动端常用UI组件库 Vant http://vant-contrib.g ...
- 【C# 集合】HashTable .net core 中的Hashtable的实现原理
上一篇我介绍了Hash函数 这篇我来说一下Hash函数在 HashTable中的应用. HashTable的特性: 1.装载因子:.net core 0.72 ,java 0.75 2.冲突解决方案: ...
- 【windows 访问控制】十一、C# 实操 对象 System.Security.AccessControl 命名空间
AccessControl 命名空间 结构图 解说: DirectorySecurity=目录ACLFileSecurity=文件ACLFileSystemAuditRule=目录和文件中SACL中的 ...