过滤机

NETCore中异常过滤器Excep

发布时间:2022/5/4 10:29:13   

介绍

实现需要继承IExceptionFilter或IAsyncExceptionFilter。

可用于实现常见的错误处理策略。

使用场景

首先讲一下我们为什么要使用异常过滤器,如果业务场景复杂,只使用HttpStatusCode,抛出异常后,后期要加很多字段来描述。

那么这种就比较不适合,我们就可以自己定义一套规则,比如返回结果必须是code,data,Message等那我们就要写一个通用数据model。

publicclassApiResultT{publicintCode{get;set;}publicstringMessage{get;set;}publicTData{get;set;}}

定义一套自己的code标准,比如1成功,0系统异常,1xx某类业务,2xx某类业务。

所以我们在抛出异常的时候需要去处理,所以异常过滤器就派上用场了,当然还可以用中间件处理异常,这里就不说了!

使用

新建ExceptionFilter继承IAsyncExceptionFilter

若要处理异常,将属性ExceptionHandled设置为或true分配Result属性。

这将停止传播异常。异常筛选器无法将异常转变为“成功”。只有操作筛选器才能执行该转变。

在处理异常的时候获取到context.Exception就能处理不同的异常类型了!

我这里自定义了一个异常类,当然实际场景中根据业务来新建你们自己的异常类满足需求就行了了!

publicclassServicesException:Exception{publicoverridestringMessage{get;}publicServicesException(stringmessage):base(message){this.Message=message;}}

ExceptionFilter类:

publicclassExceptionFilter:IAsyncExceptionFilter{publicTaskOnExceptionAsync(ExceptionContextcontext){//如果异常没有被处理则进行处理if(context.ExceptionHandled==false){intcode=0;if(context.ExceptionisServicesException){code=1;}//定义返回类型varresult=newApiResultstring{Code=code,Message=context.Exception.Message,Data=""};context.Result=newContentResult{//返回状态码设置为,表示成功StatusCode=(int)HttpStatusCode.OK,//设置返回格式ContentType="application/json;charset=utf-8",Content=JsonConvert.SerializeObject(result)};}//设置为true,表示异常已经被处理了context.ExceptionHandled=true;returnTask.CompletedTask;}}

最后我们将异常过滤器注册到全局即可!(局部注册可参看)

.NETCore中行为过滤器ActionFilterAttribute的使用介绍

黑哥聊dotNet,

转载请注明:http://www.aideyishus.com/lkzp/117.html
------分隔线----------------------------

热点文章

  • 没有热点文章

推荐文章

  • 没有推荐文章