ModelState.IsValid even when it should not be?

asp.net-web-api, c#

Solution

The `ModelState.IsValid` internally checks the `Values.All(modelState => modelState.Errors.Count == 0)` expression.

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...

Problem

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. I don't know why but `ModelState.IsValid` returns true even when it should not. Am I doing something wrong? 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); } ``` Model ``` public class UserCreate { [Required] public string Username { get; set; } [Required] public string Password { get; set; } [Required] public string Name { get; set; } } ``` Debug proof

Original source