.Net Core中使用ExceptionFilter过滤器的方法
程序员文章站
2022-04-10 08:48:20
.net core中有各种filter,分别是authorizationfilter、resourcefilter、exceptionfilter、actionfilter、resultfilter。...
.net core中有各种filter,分别是authorizationfilter、resourcefilter、exceptionfilter、actionfilter、resultfilter。可以把他们看作是.net core自带的aop的扩展封装。
今天来看其中的一种:exceptionfilter(用于全局的异常处理)
首先新建一个.net core mvc的项目
新建一个控制器:
这里我们可以看到代码运行到16行时会报一个索引项超出集合范围的错误
按照常规的思维我们在代码中会加异常处理,如下:
try { var range = enumerable.range(1, 3).toarray(); var result = range[4]; return view(); } catch (exception ex) { throw new exception(ex.message); }
但是每个方法都这样加会不会觉得很烦?有没有想过只写一次就可以了
上代码:
using microsoft.aspnetcore.hosting; using microsoft.aspnetcore.mvc; using microsoft.aspnetcore.mvc.filters; using microsoft.aspnetcore.mvc.modelbinding; using microsoft.aspnetcore.mvc.viewfeatures; using system; using system.collections.generic; using system.linq; using system.threading.tasks; namespace exceptionfilter.filter { public class customerexceptionfilter : attribute, iexceptionfilter { private readonly ihostingenvironment _hostingenvironment; private readonly imodelmetadataprovider _modelmetadataprovider; public customerexceptionfilter(ihostingenvironment hostingenvironment, imodelmetadataprovider modelmetadataprovider) { _hostingenvironment = hostingenvironment; _modelmetadataprovider = modelmetadataprovider; } /// <summary> /// 发生异常进入 /// </summary> /// <param name="context"></param> public async void onexception(exceptioncontext context) { if (!context.exceptionhandled)//如果异常没有处理 { if (_hostingenvironment.isdevelopment())//如果是开发环境 { var result = new viewresult { viewname = "../handle/index" }; result.viewdata = new viewdatadictionary(_modelmetadataprovider, context.modelstate); result.viewdata.add("exception", context.exception);//传递数据 context.result = result; } else { context.result = new jsonresult(new { result = false, code = 500, message = context.exception.message }); } context.exceptionhandled = true;//异常已处理 } } } }
我们在方法中先以特性来使用,加上这句代码:
[typefilter(typeof(customerexceptionfilter))]
之后会跳到这个视图:../handle/index ,会将异常信息传入到此视图
视图页代码:
<p>message:@viewdata["exception"]</p>
(可以自行封装。。。)
我们还可以定义成全局的
在startup类中的configureservices方法中加入这句代码
services.addcontrollerswithviews(option => { option.filters.add<customerexceptionfilter>(); }); //3.0以下的版本好像应该这样写:services.addmvc();
到此这篇关于.net core中使用exceptionfilter过滤器的方法的文章就介绍到这了,更多相关.net core使用exceptionfilter内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
推荐阅读
-
在.NET Core 3.0中的WPF中使用IOC图文教程
-
03 .NET CORE 2.2 使用OCELOT -- Docker中的Consul
-
使用NLog给Asp.Net Core做请求监控的方法
-
.net core中的Authorization过滤器使用
-
asp.net core 使用 TestServer 来做集成测试的方法
-
.net core中serilog的基本使用
-
ASP.NET Core中调整HTTP请求大小的几种方法
-
CSRF在ASP.NET Core中的处理方法详解
-
SQL Server中调用C#类中的方法实例(使用.NET程序集)
-
在.net Core 中像以前那样的使用HttpContext.Current