【发布时间】:2009-09-21 12:13:52
【问题描述】:
我在 asp.net 中看到了许多带有 WCF 的 json Web 服务示例,它们接受一个参数。我需要我的服务方法来接受许多参数并返回这样的列表;
这是我的 Service.svc:
public class Car
{
public string Title;
public int Number;
}
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service
{
[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
public List<Car> GetCarById(int userid, string password , List<Cars> carlist)
{
//Doing some stuff here
}
}
在我的 web.config 中:
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="ServiceAspNetAjaxBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<services>
<service name="Service">
<endpoint address="" behaviorConfiguration="ServiceAspNetAjaxBehavior"
binding="webHttpBinding" contract="Service" />
</service>
</services>
</system.serviceModel>
如果我想传递所有这些参数,我该如何调用这个服务?当我尝试使用参数 userid、password 和 carlist 调用该方法时,它们都为空。这是我在一个名为 Fiddler 的应用程序中使用 POST 发送给http://localhost/Service.svc/GetCarById 的内容:
HEADERS:
Host: localhost
Content-Length: 136
Content-Type: application/json; charset=utf-8
BODY:
{"d":{"password":"test","userid":123,"carlist":[{"__type":"Car","Number":1,"Title":"BMW"},{"__type":"Car","Number":2,"Title":"Honda"}]}}
响应是:{"d":null} 该方法正在返回 carlist,所以我知道该方法被调用并且该 carlist 为空。如果我将方法更改为返回一个字符串,例如“错误”,我会得到它,所以我知道该方法被调用..
你知道我做错了什么吗?
【问题讨论】:
-
查看您发送的 JSON 肯定会有所帮助,但问题仍然缺少一个关键部分 - 您用来调用的客户端 JavaScript 代码称呼。您确定您的服务方法实际上正在被调用吗?您如何获取您发送的 JSON?
-
是的,我正在使用 Fiddler 来测试该方法。用一些信息更新了原始问题。啊啊啊,看不出有什么问题!!谢谢你帮助我! :-)
-
终于搞定了,看最后一个答案..
标签: asp.net web-services json