2013-03-20 3 views
3

Это первое, что я использовал asp.net mvc webApi, и у меня есть методы Post/Put, которые имеют параметр ProductViewModel. Некоторые свойства этого ViewModel имеет аннотации данных по подтверждению таких как Required, StringLenght и т.д ... У меня есть метод столба, как это:Как заставить ModelState работать на asp.net mvc web api?

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

Не могли бы вы убедиться, что вы передаете Content-Type как часть вашего запроса? (если тип содержимого не передан, задано значение по умолчанию для конкретного типа, и состояние модели не будет иметь ошибок ... эта ошибка была исправлена ​​в последнее время).

также, вы можете сделать следующее:

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

Да, я пропусканием 'Content-Type: применение/json' по Скрипач, правильно ли это? Я получаю свой объект 'ProductViewModel', построенный и заполненный свойствами, но ModelState.IsValid всегда прав, не имеет значения, есть ли свойства с REquired, null,' IsValid' всегда истинно. это ошибка asp.net mvc webapi? –

+0

тип контента выглядит правильно ... можете ли вы рассказать, как выглядит ваша модель, а также может быть необработанный запрос от Fiddler? –

+0

Я отредактировал свой пост, взгляните на мою модель, только два свойства с некоторыми валидациями. В jSon у меня есть скрипт: '{Name: null, ShortName:" "}', просто чтобы проверить проверки, но он проверяет, я получаю другие исключения из моих инструментов ORM (nhibernate). –

Смежные вопросы