/ / jak sprawić, aby ModelState działał na interfejsie WWW asp.net mvc? - c #, asp.net-mvc, rest, asp.net-web-api, modelstate

jak uzyskać ModelState pracy na asp.net mvc web api? - c #, asp.net-mvc, reszta, asp.net-web-api, modelstate

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 № 1

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