.NET Core中异常过滤器ExceptionFilter的使用介绍
介紹
實現需要繼承IExceptionFilter 或 IAsyncExceptionFilter。
可用于實現常見的錯誤處理策略。
使用場景
首先講一下我們為什么要使用異常過濾器 ,如果業務場景復雜,只使用HttpStatusCode,拋出異常后,后期要加很多字段來描述。
那么這種就比較不適合, 我們就可以自己定義一套規則, 比如返回結果必須是 code, data, Message等那我們就要寫一個通用數據model。
public?class?ApiResult<T>{public int Code { get; set; }public string Message { get; set; }public T Data { get; set; }}定義一套自己的code標準, 比如1 成功,0 系統異常, 1xx 某類業務, 2xx 某類業務 。
所以我們在拋出異常的時候需要去處理 ,所以異常過濾器就派上用場了,當然還可以用中間件處理異常,這里就不說了!
使用
? 新建ExceptionFilter 繼承IAsyncExceptionFilter
? ? 若要處理異常,將 屬性 ExceptionHandled 設置為 或 true 分配 Result 屬性。
? ? 這將停止傳播異常。異常篩選器無法將異常轉變為“成功”。只有操作篩選器才能執行該轉變。
在處理異常的時候獲取到context.Exception就能處理不同的異常類型了!
我這里自定義了一個異常類, 當然實際場景中根據業務來新建你們自己的異常類滿足需求就行了了!
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){// 如果異常沒有被處理則進行處理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{// 返回狀態碼設置為200,表示成功StatusCode =(int)HttpStatusCode.OK,// 設置返回格式ContentType = "application/json;charset=utf-8",Content = JsonConvert.SerializeObject(result)};}// 設置為true,表示異常已經被處理了context.ExceptionHandled = true;return Task.CompletedTask;}}最后我們將異常過濾器注冊到全局即可!(局部注冊可參看)
.NET?Core中行為過濾器ActionFilterAttribute的使用介紹
黑哥聊dotNet,公眾號:黑哥聊dotNet.NET Core中行為過濾器ActionFilterAttribute的使用介紹
services.AddControllers(o => o.Filters.Add(typeof(ExceptionFilter)));測試代碼與結果:
總結
以上是生活随笔為你收集整理的.NET Core中异常过滤器ExceptionFilter的使用介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 神奇的[Caller*]属性
- 下一篇: 如何使用 .NET Core 安全地加/