Когда чувствительность к регистру важна в запросах 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 Чувствительность к регистру имен процедур и параметров
Соответствующие реализации ДОЛЖНЫ лечить имена процедур и параметров как чувствительны к регистру, такие как строка имен и БАР будет рассматриваться как два отдельных юридические лица.
Итак, похоже, что ситуации, когда это сработало для вас, были исключениями, а не случаи, когда они этого не делали. Скорее всего, кто-то на какой-то стороне уравнения просто не придерживался спецификаций.