我正在开发一个ASP.Net web api项目,我想根据我从客户端获得的JSON请求来验证我的服务器数据模型。在我的服务器模型类中,我有一个double值,我从客户端发送值为“12,14”。我编写了一个自定义验证类,它由.Net的ValidationAttribute类实现,我使用IsValid(Object value)方法来验证此用户输入。
因此当我将输入发送为“12,14”时,.Net会自动将此“12,14”转换为“1214”,认为“,”是一个组分隔符。但在这种情况下,“,”不是群组分隔符,因为这是挪威文化格式的有效双号(“无”文化)。
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(对象值)方法的输入参数时获取值。
提前致谢。
答案 0 :(得分:1)
您可以使用自定义模型绑定器。我知道您可以在常规MVC站点上使用它,因此我假设可以在Web API上使用相同或类似的代码。有一个很好的例子,可以使用自定义绑定器在Phil Haack's site解析双值。
答案 1 :(得分:0)
罪魁祸首可能是Json.NET,它将12,14翻译成1214。您应该考虑编写一个更加谨慎的自定义转换器。
您应该能够找到在网络上编写自己的转换器的说明。这是一个例子:
How to implement custom JsonConverter in JSON.NET to deserialize a List of base class objects?