ModelState.IsValid即使它不应该是什么?
我有API,我需要验证我的用户模型。我选择,我创建创建/编辑行动,以避免大规模的分配和除法验证和除了实际模型不同类别的方法。
I have API where I need to validate my user model. I choose an approach where I create different classes for Create/Edit actions to avoid mass-assignment and divide validation and actual model apart.
我不知道为什么,但 ModelState.IsValid 返回true,即使它不应该。难道我做错了什么?
I don't know why but ModelState.IsValid returns true even when it should not. Am I doing something wrong?
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; }
}
调试证明
Debug proof
的 ModelState.IsValid 内部检查 Values.All(的ModelState = GT ; modelState.Errors.Count == 0)前pression。
The ModelState.IsValid internally checks the Values.All(modelState => modelState.Errors.Count == 0) expression.
由于没有输入值收集将是空的,所以 ModelState.IsValid 将真正。
Because there was no input the Values collection will be empty so ModelState.IsValid will be true.
所以,你需要用明确的处理这种情况:
So you need to explicitly handle this case with:
if (user != null && ModelState.IsValid)
{
}
这是否是一个好的或坏的设计决策,如果你没有验证它真正的是一个不同的问题...
Whether this is a good or bad design decision that if you validate nothing it will true is a different question...