国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

在 ASP.NET Core Web API 中使用異常篩選器捕獲和統(tǒng)一處理異常

這篇具有很好參考價(jià)值的文章主要介紹了在 ASP.NET Core Web API 中使用異常篩選器捕獲和統(tǒng)一處理異常。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

在 ASP.NET Core Web API 中使用異常篩選器捕獲和統(tǒng)一處理異常,C#,asp.net core,c#,asp.net core,經(jīng)驗(yàn)分享

前言

在 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 步驟

  1. 創(chuàng)建一個(gè)ASP.NET Core webapi 項(xiàng)目

  2. 編寫自定義的異常篩選器 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;
    	}
    }
    
  3. 打開 Program.cs,設(shè)置全局的篩選器(注意其中的注釋

    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();
    
  4. 打開控制器,模擬錯(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)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ASP.NET Core Web API入門之三:使用EF Core

    ASP.NET Core Web API入門之三:使用EF Core

    一般來講我們做項(xiàng)目都會(huì)用實(shí)體類跟數(shù)據(jù)庫(kù)實(shí)體進(jìn)行關(guān)系對(duì)應(yīng),這樣的好處方便我們維護(hù)、增刪改查,并且可以減少SQL的編寫,從而統(tǒng)一風(fēng)格,那么 Entity Framework Core 就是很不錯(cuò)的ORM框架。 1、跨數(shù)據(jù)庫(kù)支持能力強(qiáng)大,只需修改配置就可以輕松實(shí)現(xiàn)數(shù)據(jù)庫(kù)切換。 2、提升了開發(fā)效

    2024年02月10日
    瀏覽(22)
  • ASP.NET Core Web API入門之二:Swagger詳細(xì)使用&路由設(shè)置

    ASP.NET Core Web API入門之二:Swagger詳細(xì)使用&路由設(shè)置

    本篇文章是Swagger的詳細(xì)使用,續(xù)上篇ASP.NET Core Web API入門之一:創(chuàng)建新項(xiàng)目。 Swagger 是一個(gè)規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化 RESTful 風(fēng)格的 Web 服務(wù)的接口文檔。 根據(jù)在代碼中使用自定義的注解來生成接口文檔,這個(gè)在前后端分離的項(xiàng)目中很重要。這樣做的

    2024年02月15日
    瀏覽(28)
  • 使用asp.net core web api創(chuàng)建web后臺(tái),并連接和使用Sql Server數(shù)據(jù)庫(kù)

    使用asp.net core web api創(chuàng)建web后臺(tái),并連接和使用Sql Server數(shù)據(jù)庫(kù)

    前言:因?yàn)橐獙懸粋€(gè)安卓端app,實(shí)現(xiàn)從服務(wù)器中獲取電影數(shù)據(jù),所以需要搭建服務(wù)端代碼,之前學(xué)過C#,所以想用C#實(shí)現(xiàn)服務(wù)器段代碼用于測(cè)試,本文使用C#語言,使用asp.net core web api組件搭建服務(wù)器端,并訪問sql server 數(shù)據(jù)庫(kù)。 一、安裝Visual studio 2022 社區(qū)版,并安裝ASP.NET和

    2024年02月14日
    瀏覽(28)
  • ASP.NET Core Web API用戶身份驗(yàn)證

    ASP.NET Core Web API用戶身份驗(yàn)證

    ASP.NET Core Web API用戶身份驗(yàn)證的方法有很多,本文只介紹JWT方法。JWT實(shí)現(xiàn)了服務(wù)端無狀態(tài),在分布式服務(wù)、會(huì)話一致性、單點(diǎn)登錄等方面凸顯優(yōu)勢(shì),不占用服務(wù)端資源。簡(jiǎn)單來說,JWT的驗(yàn)證過程如下所示: (1)通過用戶名和密碼獲取一個(gè)Token。 (2)訪問API時(shí),加上這個(gè)Toke

    2024年02月11日
    瀏覽(23)
  • ASP.NET Core 中的兩種 Web API

    ASP.NET Core 有兩種創(chuàng)建 RESTful Web API 的方式: 基于 Controller,使用完整的基于ControllerBase的基類定義接口endpoints。 基于 Minimal APIs,使用Lambda表達(dá)式定義接口 endpoints。 基于 Controller 的 Web API 可以使用構(gòu)造函數(shù)注入,或者屬性注入,遵循面向?qū)ο竽J健?基于 Minimal APIs 的 Web API 通

    2024年02月09日
    瀏覽(34)
  • ASP.NET Core Web API 流式返回,逐字顯示

    ASP.NET Core Web API 流式返回,逐字顯示

    Websocket、SSE(Server-Sent Events)和長(zhǎng)輪詢(Long Polling)都是用于網(wǎng)頁(yè)和服務(wù)端通信的技術(shù)。 Websocket是一種全雙工通信協(xié)議,能夠?qū)崿F(xiàn)客戶端和服務(wù)端之間的實(shí)時(shí)通信。它基于TCP協(xié)議,并且允許服務(wù)器主動(dòng)向客戶端推送數(shù)據(jù),同時(shí)也允許客戶端向服務(wù)器發(fā)送數(shù)據(jù)。 SSE是一種單向

    2023年04月23日
    瀏覽(21)
  • ASP.NET Core Web API之Token驗(yàn)證

    ASP.NET Core Web API之Token驗(yàn)證

    在實(shí)際開發(fā)中,我們經(jīng)常需要對(duì)外提供接口以便客戶獲取數(shù)據(jù),由于數(shù)據(jù)屬于私密信息,并不能隨意供其他人訪問,所以就需要驗(yàn)證客戶身份。那么如何才能驗(yàn)證客戶的什么呢?今天以一個(gè)簡(jiǎn)單的小例子,簡(jiǎn)述ASP.NET Core Web API開發(fā)過程中,常用的一種JWT身份驗(yàn)證方式。僅供學(xué)

    2024年02月11日
    瀏覽(22)
  • 2.1 .net 8 ASP.NET Core Web API - Controller詳解

    2.1 .net 8 ASP.NET Core Web API - Controller詳解

    書接上回,上節(jié)我們留了幾個(gè)問題,即: 1、接口Hello的名字究竟怎么來的? 2、我們?nèi)绻氚呀涌诟某善渌拿Q,應(yīng)該怎么做? 3、我們繼承ControllerBase,以及[Route(“[controller]”)]屬性,又是分別起到什么作用? 需要解決以上幾個(gè)問題,我們就要繼續(xù)深入研究Controller相關(guān)的

    2024年02月20日
    瀏覽(21)
  • ASP.NET Core 中基于 Controller 的 Web API

    ASP.NET Core 中基于 Controller 的 Web API

    客戶端發(fā)送Http請(qǐng)求,Contoller響應(yīng)請(qǐng)求,并從數(shù)據(jù)庫(kù)讀取數(shù)據(jù),序列化數(shù)據(jù),然后通過 Http Response返回序列化的數(shù)據(jù)。 Web API 的所有controllers 一般繼承于 ControllerBase 類,而不是Controller 類。 因?yàn)?Controller 類也繼承自ControllerBase 類,但是支持views,而API一般不需要這個(gè)功能。 Co

    2024年02月10日
    瀏覽(29)
  • 在 ASP.NET Core Web API 中處理 Patch 請(qǐng)求

    PUT 和 PATCH 方法用于更新現(xiàn)有資源。 它們之間的區(qū)別是,PUT 會(huì)替換整個(gè)資源,而 PATCH 僅指定更改。 在 ASP.NET Core Web API 中,由于 C# 是一種靜態(tài)語言( dynamic 在此不表),當(dāng)我們定義了一個(gè)類型用于接收 HTTP Patch 請(qǐng)求參數(shù)的時(shí)候,在 Action 中無法直接從實(shí)例中得知客戶端提供了哪

    2024年02月04日
    瀏覽(97)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包