Mam API, gdzie muszę zweryfikować mój model użytkownika. Wybieram podejście, w którym tworzę różne klasy dla czynności tworzenia/edycji, aby uniknąć przypisania masy i dzielenia walidacji oraz rzeczywistego modelu oddzielnie.ModelState.IsValid, nawet jeśli nie powinno być?
Nie wiem dlaczego, ale ModelState.IsValid
zwraca wartość true, nawet jeśli nie powinna. czy robię coś źle?
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; }
}
Pamiętaj, że nazwy wejściowe html zostały przewidziane w widoku powinna dopasować swoje cechy modela. tzn. nazwa elementu wejściowego w widoku powinna być "Nazwa użytkownika", "Hasło", "Nazwa". może to być przyczyną, dla której obiekt użytkownika ma wartość NULL, co spowodowało pojawienie się w ModelState.IsValid –
@KD Nie używa HTML, oczekuje JSON, ponieważ jest to API, a nie strona internetowa. Ale tak, rozumiem, nawet jeśli wyślę pusty obiekt JSON, to zadziała. – sed
Witam @Steve: Czy możesz pokazać widok? –