Asp.Net Core Web Api 統一模型驗證攔截器


1、關閉默認模型驗證過濾器

[ApiController] 默認自帶有400模型驗證,且優先級比較高,如果需要自定義模型驗證,則需要先關閉默認的模型驗證
在StartUp.cs 中的MVC服務配置修改

   services.AddControllers(options =>
                {
                    options.Filters.Add(new AuthorizeFilter()); //授權過濾器
                    options.Filters.Add(new ModelActionFilter()); //注冊全全局模型驗證過濾器
                })
                .ConfigureApiBehaviorOptions(options =>
                {
                    options.SuppressModelStateInvalidFilter = true;  //抑制系統自帶模型驗證

                })
                .AddControllersAsServices();

2、添加自定義模型驗證

 public class ErrorResult
    {
        /// <summary>
        /// 參數領域
        /// </summary>
        public string Field { get; set; }

        /// <summary>
        /// 錯誤信息
        /// </summary>
        public string Message { get; set; }
    }

3、添加過濾器

過濾器繼承自:ActionFilterAttribute, IActionFilter

 public class ModelActionFilter:ActionFilterAttribute,IActionFilter
    {
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            if (!context.ModelState.IsValid)
            {
                var errorResults=new List<ErrorResult>();
                foreach (var item in context.ModelState)
                {
                    var result=new ErrorResult()
                    {
                        Field = item.Key,
                    };
                    foreach (var error in item.Value.Errors)
                    {
                        if (!string.IsNullOrEmpty(result.Message))
                        {
                            result.Message += "|";
                        }

                        result.Message += error.ErrorMessage;
                    }
                    errorResults.Add(result);
                }
                context.Result=new BadRequestObjectResult(new
                {
                    Code=StatusCodes.Status400BadRequest,
                    Errors=errorResults
                });
            }
        }
    }

 4、結果測試

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM