2014-04-29 13 views
5

Tôi cố gắng để đi qua một tutorial explaining how to access a WebAPI service trong VS2013 (.net 4.5.1) và tôi nhận được lỗi biên dịch với dòng:Làm cách nào để sử dụng HttpContentExtensions.ReadAsAsync <T>()?

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

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

Tôi đã tham chiếu System.Net. Http mà apparently chứa ba phương thức không biên dịch: ReadAsAsync(), PostAsJsonAsync() và PutAsJsonAsync(). Mặc dù các lớp mở rộng không xuất hiện trong ObjectBrowser cho hội đồng vì vậy tôi không thuyết phục tôi có phiên bản đúng (phiên bản tôi có là 4.0.30319.18402).

Tôi đang sử dụng gói Microsoft.AspNet.WebApi.Client mới nhất (5.1.2) để tôi nghĩ mình có mọi thứ cần thiết.

bất cứ ai có thể thấy tại sao mã không biên dịch hoặc những gì tôi đang mất tích:

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

Cảm ơn.

+0

bản sao có thể có của [Where is HttpContent.ReadAsAsync?] (Http://stackoverflow.com/questions/10399324/where-is-httpcontent-readasasync) –

Trả lời

13

Hóa ra tôi cần tham chiếu đến System.Net.Http.Formatting.

Tôi có ấn tượng rằng đây là một phần của gói Microsoft.AspNet.WebApi.Client.

+0

Bạn có nói rằng bạn đã cài đặt 'Microsoft.AspNet.WebApi.Client 'gói nhưng tham chiếu không được thêm vào dự án của bạn? –

+0

Vâng, đúng vậy. Nó chỉ xuất hiện khi tôi cài đặt một gói NuGet (WebAPIDoodle.Http), mà tôi đã cài đặt hoàn toàn bởi vì tôi nghĩ nó sẽ cho tôi System.Net.Http.Formatting. – Badgerspot

+0

Tôi đã thử lại lần nữa trong VS 2013 trong một ứng dụng giao diện điều khiển hoàn toàn mới và nó hoạt động chính xác. Tôi đoán bạn có thể đã cài đặt gói ứng dụng khách cho một dự án khác một cách vô tình. Tuy nhiên nếu bạn có thể có được một repro rắn để cài đặt các gói và không nhận được tài liệu tham khảo xin vui lòng mở một lỗi cho chúng tôi trên http://aspnetwebstack.codeplex.com/workitem/list/basic. Cảm ơn! –

Các vấn đề liên quan