Я провел следующие тесты с запросами 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, и я обнаружил, что веб-служба очень требовательна в отношении чувствительности к регистру. Кажется, что иногда важна чувствительность к регистру, а иногда нет (см. Примеры выше).
Вот как выглядит мой код 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;
}