1

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

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

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) 方法的输入参数时获取值。

提前致谢。

4

2 回答 2

1

您也许可以使用自定义模型绑定器。我知道您可以在常规 MVC 站点上使用它,因此我假设可以在 Web API 上使用相同或相似的代码。在Phil Haack 的网站上有一个使用自定义绑定器解析双精度值的好例子。

于 2012-12-18T14:52:15.993 回答
0

罪魁祸首可能是 Json.NET,它为您将 12,14 转换为 1214。您应该考虑编写一个对此更加谨慎的自定义转换器。

您应该能够在网络上找到编写自己的转换器的说明。这是一个例子:

如何在 JSON.NET 中实现自定义 JsonConverter 以反序列化基类对象列表?

于 2012-12-19T03:29:05.513 回答