/ / как да получите ModelState работи по asp.net MVC уеб API? - c #, asp.net-mvc, почивка, asp.net-web-api, modelstate

как да получите ModelState работи по asp.net MVC уеб API? - c #, asp.net-mvc, почивка, asp.net-web-api, modelstate

Това е първото, което използвах asp.net mvc webApi, и имам Post / Put методи, които имат параметър, наречен ProductViewModel. Някои свойства на този ViewModel имат анотации за данни, за да валидират такива като Required, StringLenght и т.н. ... Имам пост метод като този:

public HttpResponseMessage Post([FromBody] ProductViewModel value)
{
if (ModelState.IsValid)
{
// persist data here...

return Request.CreateResponse(HttpStatusCode.OK);
}

return Request.CreateResponse(HttpStatusCode.BadRequest, ModelState.GetErrors());
}

имам GetErrors() метод като разширение за получаване на List<> от моите грешки и мине към клиента. Моят въпрос е: Защо ModelState не работи?

ако прехвърля null в свойство на моя ViewModel, това потвърждение просто не работи. IsValid собственост е винаги true, Има ли някакъв начин да се работи около това и да получите ModelState работа като MVC?

Моят модел изглежда така:

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; }
}

Благодаря ти.

Отговори:

1 за отговор № 1

Можете ли да се уверите, че преминавате вТип съдържание като част от заявката ви? (ако не е приет тип съдържание, се задава стойност по подразбиране за конкретния тип и състоянието на модела няма да има грешки ... тази грешка е била отстранена наскоро).

също така можете да направите следното:

return Request.CreateErrorResponse(HttpStatusCode.BadRequest, this.ModelState)