1. 程式人生 > 程式設計 >NetCore實現全域性模型繫結異常資訊統一處理(場景分析)

NetCore實現全域性模型繫結異常資訊統一處理(場景分析)

NetCore實現全域性模型繫結異常資訊統一處理(場景分析)

本文主要講JyCqqk解NetCore如何使用中介軟體捕獲模型繫結的異常資訊

場景

在.NET Core 中請求中,如果引數的型別錯誤,我們在控制器中定義的方法是不會執行的,當我們需要捕獲模型繫結的異常資訊時,可以使用ApiBehaviorOptions.。www.cppcns.com接下來通過一個小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 ne
w 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,所以我們在請求時使用字串作為引數來請求,如下圖

NetCore實現全域性模型繫結異常資訊統一處理(場景分析)

請求的結果資訊正好是我們封裝的資訊,證明ApiBehaviorOptions能夠正常的捕獲到請求中引數型別錯誤的錯誤,

到此這篇關於NetCore實現全域性模型繫結異常資訊統一處理的文章就介紹到這了,更多相關NetCore全域性異常處理內容請搜尋我們以前的文章或繼續瀏覽下面的JyCqqk相關文章希望大家以後多多支援我們!