2013-10-29 30 views
0

我很努力地發送一個PUT請求到WCF格式,它期望。我想我可以用QueryString很像GET一樣發送它,但是這只是將錯誤反饋回來。什麼是WCF PUT請求的正確格式?

//Put operation 
    [OperationContract] 
    [WebInvoke(UriTemplate = "?tid={transcriptId}&qId={quizId}&cid={choice}&mid={mbox}&status={status}", Method = "PUT", RequestFormat=WebMessageFormat.Json)] 
    vTranscript UpdateTranscript(string transcriptId, string quizId, string choice, string mbox, string status); 

我也嘗試使用CURL發送XML和JSON文件,但這些文件的值沒有被服務(值爲空)拾取。

[DataContract] 
public class vTranscript 
{ 
    [DataMember] 
    public bool validUser; 
    [DataMember] 
    public bool correctAnswer; 
    [DataMember] 
    public bool recorded; 
    } 

我假設我vTranscript不一定要配合我傳遞的參數,但我甚至試過了。

我不知道我在做什麼不正確。任何建議將不勝感激。謝謝。

回答

0

假設所有的參數都公佈你只需要以下條件:(注意貼名稱必須與方法的參數名稱相匹配)

//Put operation 
[OperationContract] 
[WebInvoke(Method = "PUT", RequestFormat=WebMessageFormat.Json)] 
vTranscript UpdateTranscript(string transcriptId, string quizId, string choice, string mbox, string status); 

UriTemplate是定義嵌入在URL中的參數。

+0

謝謝你的幫助。這工作,但現在我得到「405方法不允許」。這似乎有很多可能的原因,當我谷歌的錯誤消息。我在VS2010中運行了所有的東西,所以我懷疑它是否與我看到的跨域問題有關。 – Trebor

+0

默認情況下,PUT和DELETE動詞是禁用的。此主題(http://stackoverflow.com/a/10907343/2711582)提供了有關如何啓用它們的信息。客戶端的解決方法是執行POST並添加X-HTTP-Method-Override頭來指定實際的動詞。 – wdosanjos

+0

經過這一些工作後,我能夠解決這個問題。我以JSON數組包裝我的JSON,而不是一個簡單的JSON字符串。感謝您的幫助。 – Trebor

1

嘗試設置bodystyle,如下所示。

[WebInvoke(Method = "PUT", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)] 
+0

謝謝,這也有幫助。 – Trebor