3

这是我第一次使用 asp.net mvc webApi,我有 Post/Put 方法,其中有一个名为 ProductViewModel 的参数。Required此 ViewModel 的某些属性具有要验证的数据注释,例如StringLenght等...我有这样的 post 方法:

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

谢谢你。

4

1 回答 1

1

您能否确保将 Content-Type 作为请求的一部分传递?(如果没有传递 content-type,则为特定类型设置默认值,并且模型状态不会有错误......这个错误最近已修复)。

此外,您可以执行以下操作:

return Request.CreateErrorResponse(HttpStatusCode.BadRequest, this.ModelState)
于 2013-03-20T19:07:00.907 回答