2014-04-29 42 views
5

我試圖在VS2013(.NET 4.5.1)要經過tutorial explaining how to access a WebAPI service和我與行編譯錯誤:我如何使用HttpContentExtensions.ReadAsAsync <T>()?

Product product = await response.Content.ReadAsAsync<Product>(); 
response = await client.PostAsJsonAsync("api/products", gizmo); 

response = await client.PutAsJsonAsync(gizmoUrl, gizmo); 

我引用System.Net。其中apparently包含三個無法編譯的方法:ReadAsAsync(),PostAsJsonAsync()和PutAsJsonAsync()。儘管擴展類沒有出現在組件的ObjectBrowser中,所以我不確定我的版本是否正確(版本是4.0.30319.18402)。

我使用的是最新的NuGet Microsoft.AspNet.WebApi.Client包(5.1.2),所以我認爲我擁有所需的一切。

有人能看到爲什麼代碼不會編譯或我錯過了什麼:

using System; 
using System.Net.Http; 
using System.Net.Http.Headers; 
using System.Threading.Tasks; 

namespace WebApiClient 
{ 
class Program 
{ 
    static void Main() 
    { 
     RunAsync().Wait(); 
    } 
    static async Task RunAsync() 
    { 
     using (var client = new HttpClient()) 
     { 
      client.BaseAddress = new Uri("http://localhost:54122/"); 
      client.DefaultRequestHeaders.Accept.Clear(); 
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

      // HTTP GET 
      HttpResponseMessage response = await client.GetAsync("api/products/1"); 
      if (response.IsSuccessStatusCode) 
      { 
       //*********** 
       Product product = await response.Content.ReadAsAsync<Product>(); 
       //*********** 
       Console.WriteLine("{0}\t${1}\t{2}", product.Name, product.Price, product.Category); 
      } 

      // HTTP POST 
      var gizmo = new Product() { Name = "Gizmo", Price = 100, Category = "Widget" }; 

      //*********** 
      response = await client.PostAsJsonAsync("api/products", gizmo); 
      //*********** 
      if (response.IsSuccessStatusCode) 
      { 
       Uri gizmoUrl = response.Headers.Location; 

       // HTTP PUT 
       gizmo.Price = 80; // Update price 

       //*********** 
       response = await client.PutAsJsonAsync(gizmoUrl, gizmo); 
       //*********** 

       // HTTP DELETE 
       response = await client.DeleteAsync(gizmoUrl); 
      } 
     } 
    } 
} 
} 

感謝。

+0

可能重複[Where is HttpContent.ReadAsAsync?](http://stackoverflow.com/questions/10399324/where-is-httpcontent-readasasync) –

回答

13

原來我需要對System.Net.Http.Formatting的引用。

我得到的印象是nuGet Microsoft.AspNet.WebApi.Client包的一部分。

+0

你是說你安裝了'Microsoft.AspNet.WebApi.Client '包,但參考沒有添加到您的項目? –

+0

是的,沒錯。它只出現在我安裝另一個NuGet包(WebAPIDoodle.Http)時,我安裝它純粹是因爲我認爲它會給我System.Net.Http.Formatting。 – Badgerspot

+0

我剛剛在VS 2013中嘗試了一款全新的控制檯應用程序,並且它確實正常工作。我猜你可能已經意外地將客戶端軟件包安裝到了另一個項目中。但是,如果你可以得到一個安裝軟件包的堅實信息,並且沒有獲得參考資料,請在http://aspnetwebstack.codeplex.com/workitem/list/basic上爲我們打開一個錯誤。謝謝! –