我用发送到JSON2.0ASMXweb服务(使用ASP.NET 2.0的AJAX扩展1.0 )的JSON请求做了以下测试,似乎区分大小写在某些情况下很重要,但在其他情况下就不重要了。请参见以下示例:
{"request":{"Address":{"Address1":"123 Main Street","Address2":"suite 20","City":"New York","State":"NY","Zip":"10000",“AddressClassification”:null}
结果:包含的对象名称Address
的HTTP/1.1 200 OK
{"request":{"address":{"Address1":"123 Main Street","Address2":"suite 20","City":"New York","State":"NY","Zip":"10000",“AddressClassification”:null}
结果: web服务参数request
的HTTP/1.1 200 OK
{"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 Web Service请求区分大小写很重要?还有,这是一个普遍的web服务问题还是ASP.NET AJAX特有的问题?
其他背景信息:
我使用的是用于ASP.NET 2.0的AJAX扩展1.0,因此这个问题可能已经在该框架的后续版本中得到了解决。如果是这样,请让我知道。
在跟踪我最近的question regarding formatting JSON strings中的答案之后,我意识到我的请求失败的原因并不是因为无效的JSON (感谢T.J. Crowder指出这一点并链接到http://www.jsonlint.com/以进行JSON验证)。相反,在做了更多的测试后,我了解到问题是因为web服务不知道如何格式化我的JSON对象,并且我发现web服务在区分大小写方面非常挑剔。似乎有时候区分大小写很重要,而其他时候就不重要了(参见上面的例子)。
下面是我的web方法和类的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;
}
发布于 2010-04-29 22:59:32
根据JSON-RPC spec的说法,答案总是。
9.0过程名和参数名区分大小写
一致性实现必须将过程和参数名称视为区分大小写,这样名称bar和BAR将被视为两个不同的实体。
因此,听起来它对你有效的情况是例外,而不是它们不起作用的情况。可能是方程式的某一方的人不遵守规范。
https://stackoverflow.com/questions/2738321
复制相似问题