.NetCore——全域性異常過濾器ExceptionFilterAttribute
.NetCore——全域性異常過濾器ExceptionFilterAttribute
一、介紹
在我們的專案執行中,當程式出現異常的時候就會彈窗大黃頁,所以為了更方便的解決這個問題,我們採用全域性過濾器 ExceptionFilterAttribute 。通過它主動捕獲程式中的異常,然後經過處理再丟擲資訊。下面我們們直接上乾貨,擼起來。
二、使用
首先建立一個 MyExceptionFilter 繼承 ExceptionFilterAttribute 並重寫 OnException方法。在方法中寫自己處理邏輯,如圖
public class MyExceptionFilter : ExceptionFilterAttribute
{
LoggerHelper _loggerHelper;
public MyExceptionFilter(LoggerHelper loggerHelper)
{
_loggerHelper = loggerHelper;
}
public override void OnException(ExceptionContext context)
{
// 如果異常沒有被處理則進行處理
if (context.ExceptionHandled == false)
{
//定義返回資訊
Response res = new Response();
res.Code = 500;
res.Message = "發生錯誤,請聯絡管理員";
//寫入日誌
_loggerHelper.Error(context.HttpContext.Request.Path, context.Exception);
context.Result = new ContentResult
{
// 返回狀態碼設定為200,表示成功
StatusCode = StatusCodes.Status200OK,
// 設定返回格式
ContentType = "application/json;charset=utf-8",
Content = JsonConvert.SerializeObject(res)
};
}
// 設定為true,表示異常已經被處理了
context.ExceptionHandled = true;
}
}
下面在Startup的ConfigureServices方法中註冊,新增到全域性使用。如圖
這樣就算完成了。下面開始測試是否可以使用
再圖中可以看到我寫了一個GetTest的測試方法,並且new了一個異常,下面就看能不能捕獲異常。在異常過濾器的方法中我有一個寫入日誌的動作,且有返回資訊的處理。等呼叫完介面,看這兩個地方就知道我們們的過濾器是否好用了。
如圖所示,現在返回資訊是沒有問題的。下面看一下日誌中的記錄
通過日誌檔案的檢視,發現異常過濾器已經生效了。
三、總結
這就是全域性異常過濾器的簡單使用的全部了。
我用的環境是vs2019,.netCore3.1。
日誌使用的是Log4,通過.netcore的注入了一個實現類,進行日誌的記錄
相關文章
- .netcore全域性異常處理NetCore
- NETCORE - 全域性異常處理(Exception)NetCoreException
- spring boot 實現監聽器、過濾器、全域性異常處理Spring Boot過濾器
- NetCore過濾器NetCore過濾器
- .Net MVC中定義全域性過濾器及在Action中排除全域性過濾器MVC過濾器
- MVC使用異常過濾器處理異常MVC過濾器
- springboot 全域性異常攔截器,友好異常提示Spring Boot
- Vue定義全域性過濾器filterVue過濾器Filter
- 使用Winston替換NestJS專案中Nest內建的logger以及結合全域性異常過濾器JS過濾器
- NetCore實現全域性模型繫結異常資訊統一處理NetCore模型
- 使用路由閘道器的全域性過濾功能路由
- .net core 登入全域性驗證過濾器過濾器
- Nodejs Nestjs 路程 之 異常過濾器ExceptionfilterNodeJS過濾器ExceptionFilter
- springboot全域性異常處理Spring Boot
- wpf 捕獲全域性異常
- 設計一個全域性異常處理器
- gRPC伺服器中新增全域性異常攔截器RPC伺服器
- SpringBoot之全域性捕獲異常Spring Boot
- Spring-全域性異常攔截Spring
- SpringBoot之全域性異常處理Spring Boot
- 【SpringBoot】全域性異常處理@ControllerAdviceSpring BootController
- 如何自定義一個全域性異常捕獲器-SpiderManIDE
- dotNet8 全域性異常處理
- SpringBoot中的全域性異常處理Spring Boot
- SpringBoot處理全域性統一異常Spring Boot
- dubbo~全域性異常攔截器的使用與設計缺陷
- Spring Cloud Gateway的全域性異常處理SpringCloudGateway
- SpringBoot優雅的全域性異常處理Spring Boot
- springboot下新增全域性異常處理和自定義異常處理Spring Boot
- dubbo~全域性異常攔截器的使用與設計缺陷~續
- Spring Cloud Gateway過濾器精確控制異常返回(分析篇)SpringCloudGateway過濾器
- Spring Boot 2 Webflux的全域性異常處理Spring BootWebUX
- 簡單的全域性異常統一處理
- spring-boot-route(四)全域性異常處理Springboot
- springboot 配置錯誤頁面及全域性異常Spring Boot
- @ControllerAdvice 全域性異常響應頁面和 JSONControllerJSON
- DRF 過濾排序分頁異常處理排序
- NetCore的全域性日誌記錄NetCore