.Net Core WebApi 模型驗證無效時報400


問題

模型驗證無效時,沒有進入到接口里,而是直接報400 Bad Request,非常不友好。

環境

SDK:.Net Core 2.2.401

開發工具:VS2017

step 1 創建接口

        /// <summary>
        /// 注冊
        /// </summary>
        /// <param name="input">request Body</param>
        [HttpPost]
        [AllowAnonymous]
        public object PostRegister([FromBody] InputUserRegister input)
        {
            var userService = GetService<IUserService>();
            return userService.Register(input);
        }

Step 2 創建模型

引用命名空間

using System.ComponentModel.DataAnnotations;
 public class InputUserRegister
    {
        [Required(ErrorMessage = "請填寫用戶名")]
        [StringLength(20, ErrorMessage = "用戶名長度過長")]
        public string UserName { get; set; }

        [Required(ErrorMessage = "請填寫密碼")]
        [StringLength(20, ErrorMessage = "密碼長度過長")]
        public string Password { get; set; }

        [Required(ErrorMessage = "請填寫確認密碼")]
        [Compare("Password", ErrorMessage = "兩次輸入的密碼不一致")]

        public string ConfirmPassword { get; set; }
}

Step 3 測試

 

 

 

 解決

 #region 禁止默認行為
            services.Configure<ApiBehaviorOptions>(options =>
            {
                options.InvalidModelStateResponseFactory = (context) =>
                {
                    if (context.ModelState.IsValid)
                        return null;
                    var error = "";
                    foreach (var item in context.ModelState)
                    {
                        var state = item.Value;
                        var message = state.Errors.FirstOrDefault(p => !string.IsNullOrWhiteSpace(p.ErrorMessage))?.ErrorMessage;
                        if (string.IsNullOrWhiteSpace(message))
                        {
                            message = state.Errors.FirstOrDefault(o => o.Exception != null)?.Exception.Message;
                        }
                        if (string.IsNullOrWhiteSpace(message))
                            continue; 
                        error = message;
                        break;
                    }
                    return new JsonResult(new Models.VModels.ErrorResponse(error.ToString()));
                };
            });
            #endregion

 


免責聲明!

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



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