ModelState.IsValid即使它不应该是什么? [英] ModelState.IsValid even when it should not be?
问题描述
我有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...
这篇关于ModelState.IsValid即使它不应该是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!