>案例匹配100%:
{"request":{"Address":{"Address1":"123 Main Street","Address2":"suite 20","City":"New York","State":"NY","Zip":"10000","AddressClassification":null}}}
结果:HTTP / 1.1 200 OK
>包含对象名称的情况地址不匹配:
{"request":{"address":{"Address1":"123 Main Street","AddressClassification":null}}}
结果:HTTP / 1.1 200 OK
> Web服务参数请求的情况不匹配:
{"Request":{"address":{"Address1":"123 Main Street","AddressClassification":null}}}
结果:HTTP / 1.1 500内部服务器错误
(快速注意事项:Request类和参数请求共享同名的事实并不相关,即使将参数名称更改为lrequest,仍然需要区分大小写。)
JSON Web Service请求中的区分大小写何时重要?另外,这是一个一般的Web服务问题,还是ASP.NET AJAX特定的?
附加背景资料:
我正在使用AJAX Extensions 1.0 for ASP.NET 2.0,所以这可能已经在更高版本的框架中被解决了。如果是,请让我知道。
在跟踪我最近的question regarding formatting JSON strings中的答案后,我意识到我的请求失败的原因不是因为无效的JSON(感谢T.J. Crowder指出并链接到http://www.jsonlint.com/进行JSON验证)。相反,在做了一些更多的测试之后,我发现问题是因为Web服务没有我的JSON对象被格式化,我发现Web服务在区分大小写方面非常挑剔。看起来有时候敏感性很重要,而其他时候则不是(见上面的例子)。
[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; }
解决方法
6.5. Case-Sensitivity of Procedure and Parameter Names
Conforming implementations MUST treat
procedure and parameter names as being
case-sensitive such the names bar and
BAR would be seen as two distinct
entities.
所以,这听起来像是为你工作的情况是例外,而不是他们没有的情况。有可能某个方面的人只是不遵守规范。