REST,如何使用POST将数据从客户端发送到服务器?

时间:2010-06-30 06:47:48

标签: c# wcf rest

我正在努力将数据从我的休息客户端发送到我的休息服务器......

我创建了一个将xml发送到客户端的休息服务器,效果很好。但是,从客户端向服务器发送数据,我很难。

客户端:

_httpClientRead = new HttpClient("http://127.0.0.1:8000/");
var form = new HttpUrlEncodedForm();
form.Add("startDate", startDate);
_httpClientRead.Post("test", form.CreateHttpContent())

服务器:

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "test")]
Meeting CreateNewMeeting(string startDate);

问题似乎是客户端的HttpUrlEncodedForm。如果我在post请求中发送一个空的HttpUrlEncodedForm对象,则服务器会收到请求。添加HttpUrlEncodedForm属性时,服务器永远不会收到请求,并且没有错误消息!

我在这里缺少什么? (服务器返回xml)

如何将发布数据发送到服务器?

由于

2 个答案:

答案 0 :(得分:2)

WCF期望数据由DataContractSerializer序列化。默认情况下,您无法发送其他媒体类型,例如application/x-www-form-urlencoded

请参阅此问题以了解如何操作。 Best way to support "application/x-www-form-urlencoded" post data with WCF?

答案 1 :(得分:2)

我认为在客户端使用HttpUrlEncodedForm是一个问题,而服务器端的默认值是Xml。为清楚起见,请将服务器端的请求格式设置为RequestFormat = WebMessageFormat.Xml(在WebIncoke属性中设置此项)。执行此操作后,您可以将客户端配置为发送有效的xml。还要确保使用正确的xml命名空间。处理此问题的最简单方法是使用一个为您自动创建内容的函数:

var httpContent = HttpContentExtensions.CreateDataContract(objectToSendToServer);
// And then send it using post: 
_httpClient.Post("serviceUrl", httpContent); 

请注意,您还需要将HttpClient上的DefaultHeader设置为“application / xml”。