I've beenlookingaround e penso che la mia soluzione va bene, ma in qualche modo la proprietà ModelState.IsValid
è sempre true
.ModelState è sempre considerata valida, a prescindere di valori nulli nei campi richiesti
Si consideri il seguente frammenti di codice:
[Route("address")]
[HttpPut]
[ResponseType(typeof(UserViewModel))]
public IHttpActionResult UpdateAddress([FromBody] UpdateAdressValidationModel model)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
// irrelevant code omitted
}
[TestMethod]
public void UpdateAddress_WithoutStreet_ReturnsHttpCode400()
{
var userController = new UserController(new UserRepository(_context));
var addressInfo = new UpdateAdressValidationModel
{
City = "Ghent",
};
var response = userController.UpdateAddress(addressInfo) as BadRequestResult;
Assert.IsNotNull(response);
}
public class UpdateAdressValidationModel
{
[Required]
public string Street { get; set; }
[Required]
public int? Number { get; set; }
[Required]
public string Bus { get; set; }
[Required]
public int? PostalCode { get; set; }
[Required]
public string City { get; set; }
}
mi dà ancora un ModelState valida, anche se mostra chiaramente che le proprietà richieste sono null
.
cosa sto trascurando?
Nota che manually adding
Validator.ValidateObject(model, new ValidationContext(model));
nella parte superiore del metodo UpdateAddress
getta un ValidationException
sul campo Street
in modo che possa di fatto validare il modello. La domanda rimane: perché non lo fa automaticamente?
Inoltre, this non è applicabile perché il mio model
non è null
.
possibile duplicato del [test ModelState è sempre valida in asp.net mvc] (http://stackoverflow.com/questions/8165026/testing-modelstate-is-always-valid-in-asp-net- MVC) –