.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
复制代码

 

posted @   山治先生  阅读(2455)  评论(1编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示