To pierwszy raz, w którym używałem bolenia.net mvc webApi, a ja mam metody Post / Put, które mają parametr o nazwie ProductViewModel. Niektóre właściwości tego ViewModel zawierają adnotacje danych do sprawdzenia, takie jak Required
, StringLenght
itd ... Mam taką metodę posta:
public HttpResponseMessage Post([FromBody] ProductViewModel value)
{
if (ModelState.IsValid)
{
// persist data here...
return Request.CreateResponse(HttpStatusCode.OK);
}
return Request.CreateResponse(HttpStatusCode.BadRequest, ModelState.GetErrors());
}
Mam GetErrors()
jako rozszerzenie, aby uzyskać List<>
moich błędów i przekaż klientowi. Moje pytanie brzmi: dlaczego ModelState nie działa?
jeśli przekażę null do właściwości mojego ViewModel, ta walidacja po prostu nie działa. IsValid
właściwość jest zawsze true
. Czy jest jakiś sposób obejścia tego i uzyskania pracy ModelState, takiej jak MVC?
Mój model wygląda następująco:
public class ProductViewModel
{
[Display(ResourceType = typeof(Resources.Global), Name = "Name")]
[Required(ErrorMessageResourceType = typeof(Resources.Global), ErrorMessageResourceName = "Required")]
[StringLength(100, ErrorMessageResourceType = typeof(Resources.Global), ErrorMessageResourceName = "Range")]
public string Name { get; set; }
[Display(ResourceType = typeof(Resources.Global), Name = "ShortName")]
[Required(ErrorMessageResourceType = typeof(Resources.Global), ErrorMessageResourceName = "Required")]
[StringLength(20, ErrorMessageResourceType = typeof(Resources.Global), ErrorMessageResourceName = "Range")]
public string ShortName { get; set; }
}
Dziękuję Ci.
Odpowiedzi:
1 dla odpowiedzi № 1Czy możesz upewnić się, że przechodzisz przezTyp zawartości jako część twojego żądania? (jeśli typ zawartości nie zostanie przekazany, zostanie ustawiona wartość domyślna dla określonego typu, a stan modelu nie będzie zawierał błędów ... ten błąd został niedawno naprawiony).
możesz także wykonać następujące czynności:
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, this.ModelState)