时间:2021-05-28
.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内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本系类将会讲解asp.netcoreMVC中的内置过滤器的使用,将分为以下章节 asp.netcoreMVC过滤器之ExceptionFilter过滤器(一)
本系类将会讲解asp.netcoreMVC中的内置全局过滤器的使用,将分为以下章节 asp.netcoreMVC过滤器之ExceptionFilter过滤器(
过滤器的作用是在Action方法执行前或执行后做一些加工处理。使用过滤器可以避免Action方法的重复代码,例如,您可以使用异常过滤器合并异常处理的代码。过滤器
本文实例分析了smarty高级特性之过滤器的使用方法。分享给大家供大家参考,具体如下:高级特性中过滤器的使用1、预过滤器functionremove_dw_co
需求:vue中,除了在模板中使用过滤器,有时候,methods中也需要使用filters中的过滤器,网友hongz1125提出的解决办法:this.$optio