我正在使用 RestSharp 构建对我的 MVC 入口点的 Rest 访问(实际上,我可以从 monotouch 中使用它们,但现在我正在 Windows 7、vs2010、.net 4、RestSharp 104.1 上进行测试)
如果我创建一个请求并调用
client.ExecuteAsPost<Model.Client>( request );
它有效,我可以在提琴手中看到原始数据包
POST http://localhost.:49165/Services/Client/ClientAdminService/FindClient HTTP/1.1
Timestamp: Monday, March 18, 2013 1:56:02 AM
X-PS-Authentication: YADAYADA:<deleted for brevity>==
Accept: application/xml
User-Agent: RestSharp 104.1.0.0
Content-Type: application/xml; charset=utf-8
Host: localhost.:49165
Content-Length: 256
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
<Client xmlns="http://schemas.datacontract.org/2004/07/PSRMWebService.Model.Version1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><ID>0</ID><MailingAddress i:nil="true"/><Mask>Name</Mask><Name>Rykercom</Name><PhysicalAddress i:nil="true"/></Client>
正如你在最后看到的那样,我需要发送到服务器的序列化数据块(Model.Client 类型),这是使用添加到请求中的
Request.AddParameter("application/xml; charset=utf-8", DataPacket, RestSharp.ParameterType.RequestBody);
其中 DataPacket 是使用 DataContractSerializer 创建的序列化 blob
现在,如果我将代码更改为调用
Client.ExecuteAsyncPost<Model.Client>(Request, (response, handle) => { OnFindClientAsyncComplete(response, handle, Callback ); }, "POST");
使用 Fiddler,我得到一个完全不同的数据包,没有正文,没有内容类型,因此服务器响应失败。
POST http://localhost.:49165/Services/Client/ClientAdminService/FindClient HTTP/1.1
Timestamp: Monday, March 18, 2013 2:35:08 AM
X-PS-Authentication: YADAYADA:<deleted for bevity>==
Accept: application/xml
User-Agent: RestSharp 104.1.0.0
Host: localhost.:49165
Content-Length: 0
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
X-PS-Authentication 只是一个自定义身份验证字符串。有人知道为什么异步调用给我留下了一个空的消息正文吗?