2013-10-03 77 views
140

我想打電話從我的網站application.Am使用.NET 4.5的web API和一邊寫代碼我得到一個錯誤的HttpClient不包含定義PostAsJsonAsync方法HttpClient的不支持PostAsJsonAsync方法C#

HttpClient client = new HttpClient(); 
client.BaseAddress = new Uri("http://localhost:51093/"); 
client.DefaultRequestHeaders.Accept.Add(
    new MediaTypeWithQualityHeaderValue("application/json")); 
var user = new Users(); 
user.AgentCode = 100; 
user.Remarks = "Test"; 
user.CollectionDate = System.DateTime.Today; 
user.RemittanceDate = System.DateTime.Today; 
user.TotalAmount = 1000; 
user.OrgBranchID = 101; 

var response = client.PostAsJsonAsync("api/AgentCollection", user).Result; 

,我收到錯誤消息:

Error: 'System.Net.Http.HttpClient' does not contain a definition for 'PostAsJsonAsync' and 
no extension method 'PostAsJsonAsync' accepting a first argument of type  
'System.Net.Http.HttpClient' could be found (are you missing a using directive or an 
assembly reference?) 

請看看,並建議我。

+3

最好的辦法是增加「Microsoft.AspNet.WebApi.Client」 .Nuget包。而已! –

回答

255

是的,你需要添加一個引用到

System.Net.Http.Formatting.dll 

這可以在擴展組件區域被發現。

請注意,實現此目的的一種好方法是將NuGet包System.Net.Http.Formatting.Extension添加到您的項目中。

+4

現在我收到一個錯誤:「無法加載文件或程序集」Newtonsoft.Json,Version = 4.5.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed'或其依賴項之一。系統找不到指定的文件。「 –

+2

進入NuGet並在線查看Json.NET,或者如果您不使用NuGet,可以從這裏下載。從這裏獲取http://james.newtonking.com/json –

+0

它的工作原理 –

109

缺少的參考是System.Net.Http.Formatting.dll。但更好的解決方案是添加NuGet包Microsoft.AspNet.WebApi.Client,以確保格式化DLL的版本與我的項目中的.NET框架版本System.Net.Http一起工作。

+1

@Yuval - 我現在意識到我所建議的「解決方案」聽起來像一條評論。事實證明,Andreo創作了我建議的NuGet包。 –

+0

簡單的技巧和很好的解決方案+1 –

+0

這是回答我! (對我的問題) – JenonD

0

而不是寫這麼多的代碼來做一個簡單的調用,你可以使用互聯網上的一個包裝器。

我已經寫了一個名爲WebApiClient,在NuGet中可用...檢查出來!

http://webapiclient.azurewebsites.net

+0

[@Andreo](https://stackoverflow.com/users/3738778/andreo-romera)鏈接(http://webapiclient.azurewebsites.net)現在已於2017年11月30日中斷。 NuGet的工作鏈接是https://www.nuget.org/packages/WebApiRestService.WebApiClient/ –

+0

不幸的是,微軟已經結束了我的天藍色訂閱,網址不再有效:​​( –

93

PostAsJsonAsync處於System.Net.Http.dll(.NET 4.5.2)不再。您可以添加對System.Net.Http.Formatting.dll的引用,但這實際上屬於舊版本。我在TeamCity構建服務器上遇到了這個問題,但這兩者不會合作。

或者,您可以用PostAsync調用替換PostAsJsonAsync,它只是新dll的一部分。 更換

var response = client.PostAsJsonAsync("api/AgentCollection", user).Result; 

有了:

var response = client.PostAsync("api/AgentCollection", new StringContent(
    new JavaScriptSerializer().Serialize(user), Encoding.UTF8, "application/json")).Result; 

https://code.msdn.microsoft.com/windowsapps/How-to-use-HttpClient-to-b9289836

+4

這應該是答案。有些東西是正確的方法 – Alireza

+4

這是迄今爲止最好的答案,不要嘗試添加NuGet包或dll –

+3

完全是最佳答案選擇答案不是最佳做法_at all_,實際上Microsoft建議不要引用dll – Astaar

1

我知道這個答覆太晚了,我有同樣的問題,我是加入System.Net.Http.Formatting.Extension的NuGet,檢查在這裏和那裏後我發現添加了Nuget,但是System.Net.Http.Formatting.dll未添加到參考中,我剛剛重新安裝了Nuget

20

由於已經有爭議,自從.NET 4.5.2開始,這種方法不再可用。爲了擴大Jeroen K's answer你可以擴展方法:

public static async Task<HttpResponseMessage> PostAsJsonAsync<TModel>(this HttpClient client, string requestUrl, TModel model) 
{ 
    var serializer = new JavaScriptSerializer(); 
    var json = serializer.Serialize(model); 
    var stringContent = new StringContent(json, Encoding.UTF8, "application/json"); 
    return await client.PostAsync(requestUrl, stringContent); 
} 

現在你可以打電話給client.PostAsJsonAsync("api/AgentCollection", user)

4

我剛剛從源代碼管理中檢出的一個項目上也有這個問題。

症狀是上述錯誤並且在參考黃色警告三角形System.Net.Http.Formatting

爲了解決這個問題,我除去損壞的引用,然後用於的NuGet安裝最新版本的Microsoft.AspNet.WebApi.Client

+0

它的工作原理!要通過Nuget控制檯進行安裝,請輸入'Install-Package Microsoft.AspNet.WebApi.Client' –