本文主要講解NetCore如何使用中介軟體捕獲模型繫結的異常資訊
場景
在.NET Core 中請求中,如果引數的型別錯誤,我們在控制器中定義的方法是不會執行的,當我們需要捕獲模型繫結的異常資訊時,可以使用ApiBehaviorOptions.。接下來通過一個小demo給大家講解一下用法
實現程式碼
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);
//此時Http狀態碼返回的依舊是400,如果想返回正常的http狀態碼200,請使用下面一行程式碼
//return new ObjectResult(errors);
};
});
}
Program.cs中注入
services.ConfigureModelBindingExceptionHandling();
演示
Controller中新增TestExp1方法
[HttpGet("TestExp1")]
public IActionResult TestExp1(int id)
{
_logger.LogInformation("測試");
return Ok();
}
在TestExp1中宣告的請求引數為int,所以我們在請求時使用字串作為引數來請求,如下圖
請求的結果資訊正好是我們封裝的資訊,證明ApiBehaviorOptions能夠正常的捕獲到請求中引數型別錯誤的錯誤,
如有哪裡講得不是很明白或是有錯誤,歡迎指正
如您喜歡的話不妨點個贊收藏一下吧?