zoukankan      html  css  js  c++  java
  • ASP.NET Core 模型验证的一个小小坑

    今天在我们的一个项目中遇到一个 asp.net core 模型验证(model validation)的小问题。当模型属性的类型是 bool ,而提交上来的该属性值是 null ,asp.net core 在模型绑定时会使用该属性的默认值(这很好),但是除此之外 asp.net core 做了一个额外的小动作, 会触发模型验证失败(ModelState.IsValid 为 false),下面用示例代码看一下。

    示例 Controller 代码

    public class SignInModel
    {
        public bool IsRemember { get; set; }
    }
    
    public class AccountController : Controller
    {
        public IActionResult SignIn([FromForm]SignInModel model)
        {
            Console.WriteLine(ModelState.IsValid);
    
            if(!ModelState.IsValid)
            {
                var errors = ModelState.Select(s => new
                {
                    s.Key,
                    Value = string.Join("
    ", s.Value.Errors.Select(e => e.ErrorMessage))
                });
                Console.WriteLine(JsonConvert.SerializeObject(errors));
            }
    
            Console.WriteLine("model.IsRemember:" + model.IsRemember);
            return Ok();
        }
    }
    

    用 curl 发请求的命令

    $ curl -s -i -X POST -d 'isremember=' -H "Content-Type: application/x-www-form-urlencoded" localhost:5000/account/signin
    

    dotnet run 控制台显示的信息

    False
    [{"Key":"IsRemember","Value":"The value '' is invalid."}]
    model.IsRemember:False
    

    这个小动作让人始料不及,因为我们没有对 IsRemember 属性添加验证规则,却触发了模型验证失败,造成用户的整个提交请求失败。如果你使用 asp.net core 模型验证,需要小心这个小小坑。

    注:遇到这个问题的项目用的是 asp.net core 3.0 preview 6

  • 相关阅读:
    Jmeter配置slave
    Jmeter集合ant进行操作
    PageObject设计模式进行自动化用例的设计方法
    同学,迭代器生成器了解一下
    面向对象的一些方法与属性
    断言与异常
    wtforms-表单生成及验证
    DBUtils--数据库连接池
    Flask请求流程超清大图
    PEP8规范
  • 原文地址:https://www.cnblogs.com/dudu/p/11225082.html
Copyright © 2011-2022 走看看