gpt4 book ai didi

c# - ModelState.IsValid 即使它不应该?

转载 作者:IT王子 更新时间:2023-10-29 03:44:49 26 4
gpt4 key购买 nike

我有 API,我需要在其中验证我的用户模型。我选择了一种为创建/编辑操作创建不同类的方法,以避免批量分配并将验证和实际模型分开。

我不知道为什么 ModelState.IsValid 会返回 true,即使它不应该返回 true。我做错了什么吗?

Controller

public HttpResponseMessage Post(UserCreate user)
{
if (ModelState.IsValid) // It's valid even when user = null
{
var newUser = new User
{
Username = user.Username,
Password = user.Password,
Name = user.Name
};
_db.Users.Add(newUser);
_db.SaveChanges();
return Request.CreateResponse(HttpStatusCode.Created, new { newUser.Id, newUser.Username, newUser.Name });
}
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}

型号

public class UserCreate
{
[Required]
public string Username { get; set; }
[Required]
public string Password { get; set; }
[Required]
public string Name { get; set; }
}

调试证明

proof

最佳答案

ModelState.IsValid 在内部检查 Values.All(modelState => modelState.Errors.Count == 0) 表达式。

因为没有输入,Values 集合将为空,所以 ModelState.IsValid 将为 true

因此您需要明确处理这种情况:

if (user != null && ModelState.IsValid)
{

}

如果你什么都不验证它就会是真的,这是一个好的还是坏的设计决定是一个不同的问题......

关于c# - ModelState.IsValid 即使它不应该?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17923622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com