我想要做的是,看似簡單:通過請求正文發送一些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