2011-11-17 3 views
7

MVC 컨트롤러를 사용하여 REST API를 개발하고 있습니다. 모든 모델 바인딩 오류를 처리하고 사용자에게 친숙한 방식으로 클라이언트에보고하고 싶습니다. 내 사용자 정의 모델 바인더에서 나는 예외 처리기에 의해 안전하다고 간주되어 클라이언트에게 보여지는 특별한 예외를 이미 던지고있다. 기본 모델 바인더 (AN int에 대해 말하자면, asdf) 잘못된 값을 볼 때 ASP.NET MVC 모델 바인딩 오류를 안전하게 처리합니다.

그러나,이 중 완전히 무시 (매개 변수가 필요하지 않은 경우) 또는 던질 것으로 보인다 일반 ArgumentException (매개 변수가 필요한 경우). 손으로 전체 바인더를 다시 작성하지 않고도 두 경우를 안정적으로 처리하고 매개 변수의 이름과 관련 오류를 얻을 수 있습니까?

나는 클라이언트가 신경 써야하는 메서드와 네임 스페이스 이름을 표시하기 때문에 ArgumentException을 그대로 표시하고 싶습니다. 나는 또한 피할 수있는 경우 ArgumentException 메시지를 구문 분석하지 않으며 필요하지 않은 매개 변수가 완전히 무시되는 잘못된 값으로 문제를 해결하지 못합니다.

+0

좋은 해결책을 찾았습니까? 나는 IModelBinder를 꾸미거나 하위 클래스화할 생각을하고 있습니다. 그러나 더 좋은 방법이 있는지 알고 싶습니다. –

+0

@FabianSchmied : 불행히도 없습니다. "웹 API"모델 바인더는 아마도이 경우를 더 잘 지원할 것입니다. ASP.NET Core에 대해서는 잘 모릅니다. –

답변

3

모델에 IValidatableObject 인터페이스를 구현할 수 있습니다. 이제 자신이 가지고있는 유효성 검사 유효성을 Required 속성 유효성 검증으로 대체하여 사용자 고유의 유효성 검증 논리를 작성할 수 있습니다.

public class Model : IValidatableObject { 
    public int MyIntProperty { get; set; } 

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { 
     if (MyIntProperty == 0) { 
      yield return new ValidationResult("Please provide a valid value for MyIntProperty.", new[] { "MyIntProperty" }); 
     } 
    } 
} 

는 컨트롤러에서 당신은 유효성 검사 오류를 확인하기 위해 ModelState.Errors 수집을 검사 할 수 있습니다. 또한 강력한 형식의보기와 HTML 양식 도우미를 사용하는 경우 클라이언트 측에서 오류 CSS 클래스가 생성됩니다.