Je to prvý, ktorý som používal asp.net mvc webApi, a mám Post / Put metódy, ktoré majú parameter s názvom ProductViewModel. Niektoré vlastnosti tohto ViewModel majú anotácie údajov na overenie, ako napr Required
, StringLenght
atď. Mám metódu príspevku takto:
public HttpResponseMessage Post([FromBody] ProductViewModel value)
{
if (ModelState.IsValid)
{
// persist data here...
return Request.CreateResponse(HttpStatusCode.OK);
}
return Request.CreateResponse(HttpStatusCode.BadRequest, ModelState.GetErrors());
}
Mám GetErrors()
metóda ako rozšírenie na získanie List<>
mojich chýb a odovzdať ich klientovi. Moja otázka znie: Prečo ModelState nefunguje?
ak prejdem null do vlastníctva môjho ViewModel, táto validácia jednoducho nefunguje. IsValid
majetok je vždy true
, Existuje nejaký spôsob, ako to obísť a získať prácu ModelState ako MVC?
Môj model vyzerá takto:
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; }
}
Ďakujem.
odpovede:
1 pre odpoveď č. 1Mohli by ste sa uistiť, že ste prešli okoloTyp obsahu ako súčasť vašej žiadosti? (ak obsahový typ nie je odovzdaný, predvolená hodnota pre konkrétny typ je nastavená a stav modelu by nemal mať chyby ... táto chyba bola nedávno opravená).
Tiež by ste mohli urobiť nasledovné:
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, this.ModelState)