1

我正在开发一个ASP.Net web api项目,我想根据我从客户端获得的JSON请求来验证我的服务器数据模型。在我的服务器模型类中,我有一个双重值,并且我将客户端的值作为“12,14”发送。我写了一个由ValidationAttribute类.Net实现的自定义验证类,我使用IsValid(Object value)方法来验证此用户输入。如何使用自定义验证器验证.Net中的double值?

因此,当我将输入发送为“12,14”时,.Net会自动将此“12,14”转换为“1214”,认为“,”是组分隔符。但在这种情况下,“,”不是组织分隔符,因为这是Norwegiangian文化格式(“否”文化)的有效双数。

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网站上使用它,所以我会假设在Web API上可以使用相同或相似的代码。在Phil Haack's site上有一个使用自定义绑定器来分析双精度值的好例子。