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 で利用できると思います。カスタム バインダーを使用して double 値を解析する良い例がPhil Haack のサイトにあります。

于 2012-12-18T14:52:15.993 に答える
0

原因はおそらく、12,14 を 1214 に変換している Json.NET です。それについてより慎重なカスタムコンバーターの作成を検討する必要があります。

Web で独自のコンバーターを作成するための手順を見つけることができるはずです。次に例を示します。

JSON.NET でカスタム JsonConverter を実装して、基本クラス オブジェクトのリストを逆シリアル化する方法は?

于 2012-12-19T03:29:05.513 に答える