## 一、什麼是異常過濾器? 異常過濾器(**Exception Filters**)是 ASP.NET Core 中用於處理全局異常的機制。它們允許你在發生異常時捕獲、處理和記錄異常,並提供自定義的異常處理邏輯。異常過濾器在整個應用程式範圍內生效,可以用於處理各種異常情況。用於實現常見的錯誤處理策 ...
一、什麼是異常過濾器?
異常過濾器(Exception Filters)是 ASP.NET Core 中用於處理全局異常的機制。它們允許你在發生異常時捕獲、處理和記錄異常,並提供自定義的異常處理邏輯。異常過濾器在整個應用程式範圍內生效,可以用於處理各種異常情況。用於實現常見的錯誤處理策略,沒有之前和之後事件,處理 Razor 頁面或控制器創建、模型綁定、操作過濾器或操作方法中發生的未經處理的異常。但無法捕獲資源過濾器、結果過濾器或 MVC 結果執行中發生的異常 。
二、異常過濾器實現
異常過濾器定義:
異常過濾器的定義,需要實現介面IExceptionFilter 或者IAsyncExceptionFilter,該介面包含一個 OnException 方法或者OnExceptionAsync方,用於處理髮生的異常,繼承後重寫此方法。
#region << 版 本 註 釋 >>
/*----------------------------------------------------------------
* 創建者:碼農阿亮
* 創建時間:2023/8/15 14:02:01
* 版本:V1.0.0
* 描述:
*
* ----------------------------------------------------------------
* 修改人:
* 時間:
* 修改說明:
*
* 版本:V1.0.1
*----------------------------------------------------------------*/
#endregion << 版 本 註 釋 >>
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using System;
namespace MyWebApp.Filter
{
/// <summary>
/// 異常過濾器
/// </summary>
public class ExceptionFilter : Attribute, IExceptionFilter
{
/// <summary>
/// 沒有之前和之後事件,當程式發生沒有捕獲的異常時候執行
/// </summary>
/// <param name="context"></param>
public void OnException(ExceptionContext context)
{
//異常信息
var ex = context.Exception;
//這裡可以寫入異常日誌到資料庫、文件或者控制台
Console.WriteLine("錯誤信息:"+ex.Message);
/*
* 方便測試,此處將錯誤日誌信息返回
*/
context.Result = new ContentResult()
{
Content = ex.Message,
ContentType = "text/html"
};
}
}
}
添加到全局過濾器:
services.AddMvc(options =>
{
//異常過濾器
options.Filters.Add<ExceptionFilter>();
});
添加測試Action:
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
namespace MyWebApp.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ExceptionFilterController : ControllerBase
{
/// <summary>
/// 測試:手動拋出一個未捕獲異常
/// </summary>
/// <returns></returns>
[HttpGet]
public ActionResult Test()
{
throw new Exception("Oh,My God,A Exception Occurred......");
}
}
}
三、驗證:
介面Action訪問調用:
訪問地址:
https://localhost:5001/ExceptionFilter/Test
控制台輸出異常信息:
調用介面時異常過濾器返回異常:
建群聲明:本著技術在於分享,方便大家交流學習的初心,特此建立【編程內功修煉交流群】,熱烈歡迎各位愛交流學習的程式員進群,也希望進群的大佬能不吝分享自己遇到的技術問題和學習心得
本文來自博客園,作者:碼農阿亮,轉載請註明原文鏈接:https://www.cnblogs.com/wml-it/p/17631744.html
技術的發展日新月異,隨著時間推移,無法保證本博客所有內容的正確性。如有誤導,請大家見諒,歡迎評論區指正!
開源庫鏈接,歡迎點亮:
GitHub:https://github.com/ITMingliang
Gitee:https://gitee.com/mingliang_it
GitLab:https://gitlab.com/ITMingliang
【編程內功修煉交流群】: 【個人公眾號】: