2011-10-26 45 views
44

我試圖調用的API要求我做一個POST,但是一個空的主體。我是新來的使用WCF Web API HttpClient,我似乎無法找到將寫一個空的主體的文章的代碼。我找到了一些HttpContent.CreateEmpty()方法的引用,但我不認爲這是Web API HttpClient代碼,因爲我似乎無法找到該方法。通過HttpClient向REST API發佈一個空的主體

+0

HttpContent.CreateEmpty來自舊版HttpClient原型,它是REST Starter套件的一部分。不幸的是,在新的HttpClient中沒有等價物。 –

回答

40

使用StringContentObjectContentHttpContent派生或者你可以使用nullHttpContent(見this comment)。

+2

將StringContent與空字符串一起使用。謝謝! –

+0

它看起來像只在.NET框架4.5? http://msdn.microsoft.com/en-us/library/system.net.http.stringcontent(v=VS.110).aspx – dan

+0

它將附帶WCF Web API,但我認爲一些「好的部分」將使其進入框架本身。 –

-4

我認爲如果你的web方法沒有參數,或者它們全都適合URL模板,它會自動完成。

例如這個聲明將空體:

[OperationContract] 
    [WebGet(UriTemplate = "mykewlservice/{emailAddress}", 
    RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, 
    BodyStyle = WebMessageBodyStyle.Wrapped)] 
    void GetStatus(string emailAddress, out long statusMask); 
+0

我試圖發送一個空的身體。 HttpClient.Post()方法需要一個URI和一個HttpContent對象。當我不想發送任何內容時,我不會以HttpContent的形式傳遞。 –

+0

所以你沒有使用WCF。這更簡單: ... HttpWebRequest request =(HttpWebRequest)WebRequest.Create(「http:// ...」); request.Method =「POST」; HttpWebResponse respose =(HttpWebResponse)request.GetResponse(); ... 您導致迴應 –

+1

我正在使用HttpClient,而不是HttpWebRequest。使用帶空字符串的StringContent起作用。 –

27

難道在此之前,只是保持簡單:

Task<HttpResponseMessage> task = client.PostAsync(url, null); 
+0

這比接受的答案更清潔,應該投票表決。 –

2

有沒有發現:

任務task = client.PostAsync(URL,NULL);

將null添加到WSO2上失敗的請求正文。替換爲:

Task task = client.PostAsync(url,new {});

而且工作。