.NET Core中异常过滤器ExceptionFilter的使用介绍
介紹
實(shí)現(xiàn)需要繼承IExceptionFilter 或 IAsyncExceptionFilter。
可用于實(shí)現(xiàn)常見的錯(cuò)誤處理策略。
使用場景
首先講一下我們?yōu)槭裁匆褂卯惓_^濾器 ,如果業(yè)務(wù)場景復(fù)雜,只使用HttpStatusCode,拋出異常后,后期要加很多字段來描述。
那么這種就比較不適合, 我們就可以自己定義一套規(guī)則, 比如返回結(jié)果必須是 code, data, Message等那我們就要寫一個(gè)通用數(shù)據(jù)model。
public?class?ApiResult<T>{public int Code { get; set; }public string Message { get; set; }public T Data { get; set; }}定義一套自己的code標(biāo)準(zhǔn), 比如1 成功,0 系統(tǒng)異常, 1xx 某類業(yè)務(wù), 2xx 某類業(yè)務(wù) 。
所以我們?cè)趻伋霎惓5臅r(shí)候需要去處理 ,所以異常過濾器就派上用場了,當(dāng)然還可以用中間件處理異常,這里就不說了!
使用
? 新建ExceptionFilter 繼承IAsyncExceptionFilter
? ? 若要處理異常,將 屬性 ExceptionHandled 設(shè)置為 或 true 分配 Result 屬性。
? ? 這將停止傳播異常。異常篩選器無法將異常轉(zhuǎn)變?yōu)椤俺晒Α?。只有操作篩選器才能執(zhí)行該轉(zhuǎn)變。
在處理異常的時(shí)候獲取到context.Exception就能處理不同的異常類型了!
我這里自定義了一個(gè)異常類, 當(dāng)然實(shí)際場景中根據(jù)業(yè)務(wù)來新建你們自己的異常類滿足需求就行了了!
public class ServicesException : Exception{public override string Message { get; }public ServicesException(string message) : base(message){this.Message = message;}}ExceptionFilter?類:
public class ExceptionFilter : IAsyncExceptionFilter{public Task OnExceptionAsync(ExceptionContext context){// 如果異常沒有被處理則進(jìn)行處理if (context.ExceptionHandled == false){int code = 0;if (context.Exception is ServicesException){code = 1;}// 定義返回類型var result = new ApiResult<string>{Code = code,Message = context.Exception.Message,Data=""};context.Result = new ContentResult{// 返回狀態(tài)碼設(shè)置為200,表示成功StatusCode =(int)HttpStatusCode.OK,// 設(shè)置返回格式ContentType = "application/json;charset=utf-8",Content = JsonConvert.SerializeObject(result)};}// 設(shè)置為true,表示異常已經(jīng)被處理了context.ExceptionHandled = true;return Task.CompletedTask;}}最后我們將異常過濾器注冊(cè)到全局即可!(局部注冊(cè)可參看)
.NET?Core中行為過濾器ActionFilterAttribute的使用介紹
黑哥聊dotNet,公眾號(hào):黑哥聊dotNet.NET Core中行為過濾器ActionFilterAttribute的使用介紹
services.AddControllers(o => o.Filters.Add(typeof(ExceptionFilter)));測試代碼與結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的.NET Core中异常过滤器ExceptionFilter的使用介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 神奇的[Caller*]属性
- 下一篇: 如何使用 .NET Core 安全地加/