NetCore實(shí)現(xiàn)全局模型綁定異常信息統(tǒng)一處理(場(chǎng)景分析)

本文主要講解NetCore如何使用中間件捕獲模型綁定的異常信息
場(chǎng)景
在.NET Core 中請(qǐng)求中,如果參數(shù)的類(lèi)型錯(cuò)誤,我們?cè)诳刂破髦卸x的方法是不會(huì)執(zhí)行的,當(dāng)我們需要捕獲模型綁定的異常信息時(shí),可以使用ApiBehaviorOptions.。接下來(lái)通過(guò)一個(gè)小demo給大家講解一下用法
實(shí)現(xiàn)代碼
public static void ConfigureModelBindingExceptionHandling(this IServiceCollection services)
{
services.Configure<ApiBehaviorOptions>(options =>
{
options.InvalidModelStateResponseFactory = actionContext =>
{
var errors = actionContext.ModelState?
.Where(e => e.Value.Errors.Count > 0)
?.Select(e => new object //api返回的Model信息
{
ErrorCode = -9998,
ErrorMessage=e.Value.Errors.First().ErrorMessage,
Status=false,
Data=null
})?.FirstOrDefault();
return new BadRequestObjectResult(errors);
//此時(shí)Http狀態(tài)碼返回的依舊是400,如果想返回正常的http狀態(tài)碼200,請(qǐng)使用下面一行代碼
//return new ObjectResult(errors);
};
});
}
Program.cs中注入
services.ConfigureModelBindingExceptionHandling();
演示
Controller中添加TestExp1方法
[HttpGet("TestExp1")]
public IActionResult TestExp1(int id)
{
_logger.LogInformation("測(cè)試");
return Ok();
}
在TestExp1中聲明的請(qǐng)求參數(shù)為int,所以我們?cè)谡?qǐng)求時(shí)使用字符串作為參數(shù)來(lái)請(qǐng)求,如下圖

請(qǐng)求的結(jié)果信息正好是我們封裝的信息,證明ApiBehaviorOptions能夠正常的捕獲到請(qǐng)求中參數(shù)類(lèi)型錯(cuò)誤的錯(cuò)誤,
到此這篇關(guān)于NetCore實(shí)現(xiàn)全局模型綁定異常信息統(tǒng)一處理的文章就介紹到這了,更多相關(guān)NetCore全局異常處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
.NET/ASP.NET Routing路由(深入解析路由系統(tǒng)架構(gòu)原理)
這篇文章主要介紹了.NET/ASP.NET Routing路由(深入解析路由系統(tǒng)架構(gòu)原理),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
.NET?Core類(lèi)庫(kù)項(xiàng)目中讀取appsettings.json配置的方法
ASP.NET?Core是一個(gè)全新的Web開(kāi)發(fā)平臺(tái),微軟在它上面構(gòu)建了MVC、SingalR、GRPC、Orleans這樣廣泛使用的Web框架,今天通過(guò)本文給大家詳細(xì)介紹下.NET?Core讀取appsettings.json配置的方法,感興趣的朋友一起看看吧2022-03-03
.NetCore實(shí)現(xiàn)上傳多文件的示例詳解
本章和大家分享的是.NetCore的MVC框架上傳文件的示例,主要講的內(nèi)容有:form方式提交上傳,ajax上傳,ajax提交+上傳進(jìn)度效果,Task并行處理+ajax提交+上傳進(jìn)度,對(duì)大家非常有幫助,感興趣的朋友跟隨小編一起學(xué)習(xí)吧2017-04-04
xpath的數(shù)據(jù)和節(jié)點(diǎn)類(lèi)型以及XPath中節(jié)點(diǎn)匹配的基本方法
xpath的數(shù)據(jù)和節(jié)點(diǎn)類(lèi)型以及XPath中節(jié)點(diǎn)匹配的基本方法,學(xué)習(xí)xpath的朋友可以參考下。2010-09-09
Visual Studio(VS2017)配置C/C++ PostgreSQL9.6.3開(kāi)發(fā)環(huán)境
這篇文章主要為大家詳細(xì)介紹了Visual Studio(VS2017)配置C/C++,PostgreSQL9.6.3開(kāi)發(fā)環(huán)境,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
.NET?Core使用Redis實(shí)現(xiàn)創(chuàng)建分布式鎖
分布式鎖一般用于確保在分布式系統(tǒng)中,同一時(shí)間只有一個(gè)進(jìn)程可以執(zhí)行某段代碼,本文將通過(guò).NET?Core使用Redis實(shí)現(xiàn)創(chuàng)建分布式鎖,感興趣的可以了解下2025-01-01
ASP.net中實(shí)現(xiàn)基于UrlRewrite的防盜鏈功能
這篇文章主要介紹了ASP.net中如何實(shí)現(xiàn)基于UrlRewrite的防盜鏈,需要的朋友可以參考下2014-03-03
關(guān)于有些Asp.net項(xiàng)目發(fā)布后出現(xiàn)網(wǎng)址亂碼的解決方法
最近在部署一個(gè)網(wǎng)站,net2.0開(kāi)發(fā)的,但是遇到一個(gè)很奇怪的問(wèn)題。2011-07-07
asp.net Google的translate工具翻譯 API
很久前的一天,我想使用這個(gè)東西,然后看了下,GooGle的Translate工具目前沒(méi)有公開(kāi)API,還是一個(gè)逐漸完善的過(guò)程,另一方面,利用一段很小的程序就可以得到我們想要的效果。2008-12-12

