/ / Ako sa dostať ModelState pracuje na asp.net mvc web api? - c #, asp.net-mvc, zvyšok, asp.net-web-api, modelstate

ako sa dostať ModelState pracuje na asp.net mvc web api? - c #, asp.net-mvc, zvyšok, asp.net-web-api, modelstate

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ď č. 1

Mohli 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)