2014-04-29 3 views
5

Próbuję przejść tutorial explaining how to access a WebAPI service w VS2013 (.NET 4.5.1) i pojawiają się błędy kompilacji z linii:Jak korzystać z HttpContentExtensions.ReadAsAsync <T>()?

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

i

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

mam odwoływać System.Net. Http który apparently zawiera trzy metody, których nie można skompilować: ReadAsAsync(), PostAsJsonAsync() i PutAsJsonAsync(). Mimo że klasa rozszerzeń nie pojawia się w ObjectBrowser dla zestawu, więc nie jestem przekonany, że mam odpowiednią wersję (wersja, którą mam, to 4.0.30319.18402).

Używam najnowszego pakietu nuGet Microsoft.AspNet.WebApi.Client (5.1.2), więc myślę, że mam wszystko, co jest wymagane.

Czy ktoś może zrozumieć, dlaczego kod nie kompiluje lub co mi brakuje:

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); 
      } 
     } 
    } 
} 
} 

Dzięki.

+0

możliwy duplikat [Gdzie jest HttpContent.ReadAsAsync?] (Http://stackoverflow.com/questions/10399324/where-is-httpcontent-readasasync) –

Odpowiedz

13

Okazuje się, że potrzebowałem odniesienia do System.Net.Http.Formatowanie.

Odniosłem wrażenie, że jest to część pakietu nuGet Microsoft.AspNet.WebApi.Client.

+0

Czy mówisz, że zainstalowałeś 'Microsoft.AspNet.WebApi.Client? 'pakiet, ale referencja nie została dodana do twojego projektu? –

+0

Tak, zgadza się. Pojawił się tylko wtedy, gdy zainstalowałem inny pakiet NuGet (WebAPIDoodle.Http), który zainstalowałem wyłącznie dlatego, że myślałem, że da mi on System.Net.Http.Formatting. – Badgerspot

+0

Po raz kolejny spróbowałem tego w VS 2013 w zupełnie nowej aplikacji konsolowej i działa poprawnie. Zgaduję, że mógłbyś przypadkowo zainstalować pakiet klienta w innym projekcie. Jeśli jednak możesz uzyskać solidną repro za zainstalowanie pakietu i nie otrzymanie referencji, otwórz błąd dla nas na http://aspnetwebstack.codeplex.com/workitem/list/basic. Dzięki! –