Когда чувствительность к регистру важна в запросах JSON для веб-служб ASP.NET(ASMX)?

Я провел следующие тесты с запросами JSON, отправленными веб-службе ASP.NET 2.0 ASMX (с использованием AJAX Extensions 1.0 для ASP.NET 2.0), и кажется, что чувствительность к регистру важна в некоторых ситуациях, но не в других. Смотрите следующие примеры:

  • Случай соответствует 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

  • Случай с параметром веб-службы 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? Кроме того, это общая проблема веб-службы или она специфична для ASP.NET AJAX?


Дополнительная справочная информация:

Я использую AJAX Extensions 1.0 для ASP.NET 2.0, так что это может быть решено в более поздних версиях платформы. Если да, пожалуйста, дайте мне знать.

Прослушав ответы на мой последний вопрос о форматировании строк JSON, я понял, что причина, по которой мой запрос не был выполнен, не из-за недействительного JSON (спасибо TJ Crowder за указывая на это и ссылаясь на http://www.jsonlint.com/ для проверки JSON). Скорее, проведя дополнительное тестирование, я узнал, что проблема в том, что веб-сервису не удалось отформатировать мой объект JSON, и я обнаружил, что веб-сервис очень требователен к чувствительности к регистру. Кажется, что иногда важна чувствительность к регистру, а иногда нет (см. примеры выше).

Вот как выглядит мой код С# для веб-метода и классов:

[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;
}

Ответ 1

Согласно спецификации JSON-RPC, ответ всегда.

9.0 Чувствительность к регистру имен процедур и параметров

Соответствующие реализации ДОЛЖНЫ лечить имена процедур и параметров как чувствительны к регистру, такие как строка имен и БАР будет рассматриваться как два отдельных юридические лица.

Итак, похоже, что ситуации, когда это сработало для вас, были исключениями, а не случаи, когда они этого не делали. Скорее всего, кто-то на какой-то стороне уравнения просто не придерживался спецификаций.