我想要做的是,看似简单:通过请求正文发送一些POX,让WCF服务处理它,并返回201状态码。在我的服务合同中,我定义了以下方法:在WCF ReSTful服务中,POST或PUT请求的内容类型是否需要为“application/x-www-form-urlencoded”?
[WebInvoke(Method = "PUT", UriTemplate = "/content/add", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Xml, RequestFormat=WebMessageFormat.Xml)]
[OperationContract]
Stream AddContent(Stream input);
这里的动词没有关系;我可以很容易地用'POST'替换'PUT',并以相同的结果结束。上述方法的实现如下:
public Stream AddContent(Stream input)
{
WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.Created;
}
由于这种方法实际上做的是无关紧要的我省略了所有的程序代码。为了测试这个功能,我发射了小提琴手,并发表了如下要求:
User-Agent: Fiddler
Host: myhost.com
Content-Length: 771
Content-Type: text/xml && application/xml; charset: utf8
<xmlDataGoesHere></xmlDataGoesHere>
的内容类型提供的值是不正确的,我知道,我只是用它来说明,我已经尝试过的Content-Type的。如果我点击Fiddler中的'执行',我的服务中的响应代码是400错误请求。值得注意的是,我的服务方法实际上并没有在这个secnario中受到攻击,请求在它到达之前就已经死亡。因此,大量丰富消除的阅读和过程后,我改变了内容类型到:
Content-Type: application/x-www-form-urlencoded
如果我现在执行的提琴手要求从我的服务返回的状态代码是201创建。有什么我想我为什么不能将Content-Type设置为URLEncoded以外的任何东西?我曾尝试调整ServiceContract中的BodyStyle和RequestFormat属性,但这些属性对结果没有任何影响。任何人都可以阐明为什么会发生这种情况?
感谢您的回复。但即使使用POX格式化程序,如下所示:http://wcfrestcontrib.codeplex.com/wikipage?title=De%2fserialization%20Overview&referringTitle=Home不允许我传入text/xml作为内容类型。此外,它还阻止了我通过application/x-www-form-urlencoded。这两个请求都会导致400个错误! – dparsons 2010-01-20 18:10:32