1

ASP.Net 웹 API 프로젝트를 개발 중이며 클라이언트 측에서 얻은 JSON 요청에 따라 서버 데이터 모델의 유효성을 검사하려고합니다. 내 서버 모델 클래스에서 이중 값을 갖고 클라이언트 측의 값을 "12,14"로 보내고 있습니다. 나는 .Net의 ValidationAttribute 클래스에 의해 구현되는 사용자 정의 유효성 검사 클래스를 작성했으며이 사용자 입력의 유효성을 검사하기 위해 IsValid (Object value) 메서드를 사용하고 있습니다..Net에서 사용자 정의 유효성 검사기를 사용하여 이중 값의 유효성을 검사하는 방법은 무엇입니까?

"12,14"로 입력하면, .Net은 자동으로이 "12,14"를 "1214"로 변환합니다. ","는 그룹 구분 기호입니다. 하지만이 경우 노르웨이 문화 형식 ('no'culture)에 유효한 Double 번호이므로 그룹 구분 기호가 아닙니다.

public class Client : IClient 
{ 

    public string ClientId { get; set; } 
    public int EngagementId { get; set; } 
    [MyCustomDoubleType] 
    public double MyValue{ get; set; } //Notice that this is my double value to be validated. 
} 

내가 "MyValue"

public class MyCustomDoubleTypeAttribute : ValidationAttribute 
{ 

    public override bool IsValid(object value) //When I send "12,14" from client, the value gets assigned to this value is "1214". .Net thinks "," is a group separator and removes it. 
    { 
     string doubleValue = value.ToString(); 
     try 
     { 
      Thread.CurrentThread.CurrentCulture = new CultureInfo("no"); 
      double convertedDouble = double.Parse(doubleValue); 
      string convertedString = convertedDouble.ToString(Thread.CurrentThread.CurrentCulture); 
      if (convertedString.Equals(doubleValue)) 
      { 
       return true; 
      } 
      return false; 
     } 
     catch (FormatException formatException) 
     { 
      return false; 
     } 
    } 

    public override string FormatErrorMessage(string name) 
    { 
     return string.Format(CultureInfo.CurrentCulture, 
          ErrorMessageString, 
          name); 
    } 
} 

그래서 내 문제를 검증하기 위해 작성한 사용자 정의 유효성 검사기입니다. 내가 원하는 것은 IsValid (Object value) 메서드의 입력 매개 변수에 클라이언트 측에 입력 할 때 값을 가져 오는 것입니다.

미리 감사드립니다.

답변

1

맞춤형 모델 바인더를 사용할 수 있습니다. 나는 이것을 당신이 일반 MVC 사이트에서 사용할 수 있다는 것을 알고있다. 그래서 나는 동일하거나 유사한 코드가 웹 API에서 활용 될 수 있다고 생각할 것이다. Phil Haack's site에서 이중 값을 구문 분석하기 위해 사용자 지정 바인더를 사용하는 좋은 예가 있습니다.