如何使用 HttpContentExtensions.ReadAsAsync<T>()?
Posted
技术标签:
【中文标题】如何使用 HttpContentExtensions.ReadAsAsync<T>()?【英文标题】:How can I use HttpContentExtensions.ReadAsAsync<T>()? 【发布时间】:2014-06-15 06:32:49 【问题描述】:我正在尝试在 VS2013 (.net 4.5.1) 中通过 tutorial explaining how to access a WebAPI service,但出现编译错误:
Product product = await response.Content.ReadAsAsync<Product>();
response = await client.PostAsJsonAsync("api/products", gizmo);
和
response = await client.PutAsJsonAsync(gizmoUrl, gizmo);
我引用了 System.Net.Http,其中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\t2", 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);
谢谢。
【问题讨论】:
Where is HttpContent.ReadAsAsync? 的可能副本 【参考方案1】:原来我需要参考 System.Net.Http.Formatting。
我觉得这是 nuGet Microsoft.AspNet.WebApi.Client 包的一部分。
【讨论】:
你是说你安装了Microsoft.AspNet.WebApi.Client
包但是引用没有添加到你的项目中?
是的,没错。它只在我安装另一个 NuGet 包 (WebAPIDoodle.Http) 时出现,我安装它纯粹是因为我认为它会给我 System.Net.Http.Formatting。
我刚刚在 VS 2013 中的一个全新控制台应用程序中再次尝试了它,它确实可以正常工作。我猜您可能不小心将客户端软件包安装到了另一个项目中。但是,如果您可以得到一个可靠的安装包并且没有获得参考,请在aspnetwebstack.codeplex.com/workitem/list/basic 上为我们打开一个错误。谢谢!
谢谢一晒。我在一个空白解决方案上进行了尝试,它奏效了。一定是用户错误。再次感谢。以上是关于如何使用 HttpContentExtensions.ReadAsAsync<T>()?的主要内容,如果未能解决你的问题,请参考以下文章
如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]
如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?