前言
在 ASP.NET Core Web API 中,異常篩選器(Exception Filter)是一種用于處理發(fā)生在 Web API 控制器或管道中的異常的機(jī)制。
異常篩選器可以捕獲和處理應(yīng)用程序中發(fā)生的異常,當(dāng)系統(tǒng)中出現(xiàn)未經(jīng)處理的異常的時(shí)候,異常篩選器就會(huì)執(zhí)行,我們可以在異常篩選器中對(duì)異常進(jìn)行處理,例如記錄日志、返回自定義錯(cuò)誤信息等。
需要注意的是,只有 ASP.NET Core 線程中的未處理異常才會(huì)被異常篩選器處理。
本文主要通過一個(gè)實(shí)例來講述在 ASP.NET Core Web API 中如何使用異常篩選器。
Step By Step 步驟
-
創(chuàng)建一個(gè)ASP.NET Core webapi 項(xiàng)目
-
編寫自定義的異常篩選器 MyExceptionFilter,實(shí)現(xiàn) IAsyncExceptionFilter 接口(注意其中的注釋)
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; public class MyExceptionFilter : IAsyncExceptionFilter { private readonly ILogger<MyExceptionFilter> logger; private readonly IHostEnvironment env; // 注入 ILogger 和 IHostEnvironment // IHostEnvironment 用于判斷環(huán)境類型 public MyExceptionFilter( ILogger<MyExceptionFilter> logger, IHostEnvironment env) { this.logger = logger; this.env = env; } public Task OnExceptionAsync(ExceptionContext context) { Exception exception = context.Exception; logger.LogError(exception, "UnhandledException occured"); string message; if (env.IsDevelopment()) { // 如果是開發(fā)環(huán)境,打印所有的異常堆棧信息 message = exception.ToString(); } else { // 否則只打印簡(jiǎn)單信息 message = "程序中出現(xiàn)未處理異常"; } // 設(shè)置響應(yīng)報(bào)文的內(nèi)容 ObjectResult result = new ObjectResult(new { code = 500, message = message }); result.StatusCode = 500; context.Result = result; // 設(shè)置context.ExceptionHandled的值為true,讓ASP.NET Core不再執(zhí)行默認(rèn)的異常響應(yīng)邏輯 context.ExceptionHandled = true; return Task.CompletedTask; } }
-
打開 Program.cs,設(shè)置全局的篩選器(注意其中的注釋)文章來源:http://www.zghlxwxcb.cn/news/detail-804239.html
using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); // 注冊(cè)自定義異常過濾器服務(wù) // MvcOptions是ASP.NET Core項(xiàng)目的主要配置對(duì)象 // 用于向Filters注冊(cè)全局的篩選器 builder.Services.Configure<MvcOptions>(opt => { opt.Filters.Add<MyExceptionFilter>(); }); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();
-
打開控制器,模擬錯(cuò)誤進(jìn)行測(cè)試文章來源地址http://www.zghlxwxcb.cn/news/detail-804239.html
using Microsoft.AspNetCore.Mvc; namespace 異常篩選器.Controllers { [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { private readonly ILogger<WeatherForecastController> _logger; public WeatherForecastController(ILogger<WeatherForecastController> logger) { _logger = logger; } [HttpGet(Name = "GetWeatherForecast")] public string Get() { throw new Exception("xxx"); } } }
到了這里,關(guān)于在 ASP.NET Core Web API 中使用異常篩選器捕獲和統(tǒng)一處理異常的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!