web-dev-qa-db-ja.com

ASP.NET Webサービス(ASMX)へのJSONリクエストで大文字と小文字の区別が重要になるのはいつですか?

(AJAX Extensions 1.0 for ASP.NET 2.0を使用して)ASP.NET 2.0 ASMX Webサービスに送信されたJSONリクエストを使用して次のテストを実行しました。次の例を参照してください。

  • ケースは100%に一致:

    {"request":{"Address":{"Address1":"123 Main Street","Address2":"suite 20","City":"New York","State":"NY","Zip":"10000","AddressClassification":null}}}
    

    結果:HTTP/1.1 200 OK

  • 含まれるオブジェクト名Addressの大文字と小文字が一致しません:

    {"request":{"address":{"Address1":"123 Main Street","Address2":"suite 20","City":"New York","State":"NY","Zip":"10000","AddressClassification":null}}}
    

    結果:HTTP/1.1 200 OK

  • Webサービスパラメータrequestの大文字と小文字が一致しません:

    {"Request":{"address":{"Address1":"123 Main Street","Address2":"suite 20","City":"New York","State":"NY","Zip":"10000","AddressClassification":null}}}
    

    結果:HTTP/1.1 500 Internal Server Error

(クイックノート:クラスRequestとパラメーターrequestが同じ名前を共有しているという事実は関係ありません。パラメーター名をlrequest、大文字と小文字の区別が引き続き必要です。)

JSON Webサービスリクエストの大文字と小文字の区別はいつ重要ですか?また、これはWebサービスの一般的な問題ですか、それともASP.NET AJAXに固有の問題ですか?


追加の背景情報:

AJAX Extensions 1.0 for ASP.NET 2.0を使用しているため、フレームワークの以降のバージョンで対処されている可能性があります。その場合はお知らせください。

私の最新の JSON文字列のフォーマットに関する質問 の回答をフォローした後、リクエストが失敗した理由は無効なJSONが原因ではないことに気付きました( TJ Crowderに感謝 =それを指摘してリンクする http://www.jsonlint.com/ JSON検証用)。むしろ、さらにテストを行った結果、問題はWebサービスがJSONオブジェクトのフォーマット方法を変更していないためであり、Webサービスが非常にpickyであることがわかりました大文字と小文字を区別します。大文字と小文字の区別が重要な場合とそうでない場合があります(上記の例を参照)。

WebメソッドとクラスのC#コードは次のようになります。

[WebMethod]
public Response ValidateAddress(Request request)
{
    return new test_AddressValidation().GenerateResponse(
        test_AddressValidation.ResponseType.Ambiguous);
}

...

public class Request
{
    public Address Address;
}

public class Address
{
    public string Address1;
    public string Address2;
    public string City;
    public string State;
    public string Zip;
    public AddressClassification AddressClassification;
}

public class AddressClassification
{
    public int Code;
    public string Description;
}
23
Ben McCormack

JSON-RPC spec によると、答えは常にです。

9.0プロシージャ名とパラメータ名の大文字と小文字の区別

準拠する実装は、プロシージャとパラメータの名前を大文字と小文字を区別するものとして扱う必要があります。そのため、名前バーとBARは2つの別個のエンティティと見なされます。

ですから、それがうまくいった状況は例外であり、うまくいかなかった場合ではないようです。方程式の片側にいる誰かが仕様を順守していなかった可能性があります。

53
Serapth