Я провел следующие тесты с запросами 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;
}