2013-03-20 5 views
3

asp.net mvc webApi를 처음 사용하고 ProductViewModel이라는 매개 변수가있는 Post/Put 메서드가 있습니다. 내 오류의 List<>를 얻을 수 확장으로 GetErrors() 방법을 가지고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()); 
} 

이 뷰 모델의 일부 속성은 다음과 같은 Required, StringLenght 등 ... 나는이 같은 포스트 방법을 검증하는 데이터 주석이 있습니다 클라이언트에게 전달하십시오. 내 질문은 : ModelState가 작동하지 않는 이유는 무엇입니까?

ViewModel의 속성에 null을 전달하면이 유효성 검사가 작동하지 않습니다. IsValid 속성은 항상 true입니다. 이 문제를 해결하고 MVC와 같은 ModelState 작업을 수행 할 수있는 방법이 있습니까?

내 모델은 다음과 같습니다

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을 전달했는지 확인하십시오. (content-type이 전달되지 않으면 특정 유형의 기본값이 설정되고 모델 상태에 오류가없는 것입니다 ... 최근에이 버그가 수정되었습니다).

또한, 당신이 할 수있는 다음 :

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

예, 나는'콘텐츠 형식 통과했다 : 피들러에 의해 응용 프로그램/json',이 권리를? 개체 'ProductViewModel'이 생성되고 속성으로 채워지지만 ModelState.IsValid는 항상 true입니다. REquired가있는 속성이있는 경우 중요하지 않습니다.'IsValid'는 항상 true입니다. asp.net mvc webapi의 버그입니까? –

+0

콘텐츠 유형이 올바른 것처럼 보입니다 ... 귀하의 모델이 어떻게 보이는지, 또한 Fiddler의 원시 요청을 공유 할 수 있습니까? –

+0

내 게시물을 편집하고 내 모델을 살펴보고 몇 가지 유효성 검사가있는 두 개의 속성 만 살펴 보았습니다. {{Name : null, ShortName : "}}, 유효성을 테스트하기 위해서만 유효하지만, ORM의 도구 (nhibernate)에 대한 다른 예외가 있습니다. –

관련 문제