HttpClient 和 ReadAsAsync<T>() 扩展方法

15

我正在启动一个新的 .Net 4.0 项目,并将使用一个公共 API 进行一些工作。我计划使用Microsoft HttpClient类,因此我安装了最新稳定版本的Microsoft.Net.Http NuGet包(版本2.2.13)。我正在查看一个同事编写的一些 POC 代码,也使用了一个用于HttpClient的NuGet包,发现里面有这样的代码:

HttpClient client = new HttpClient();
HttpResponseMessage response = client.GetAync("/uri").Result;

DomainType result = response.Content.ReadAsAsync<DomainType>().Result;
在我的项目中,添加了对Microsoft.Net.Http包的引用后,我尝试编写类似的代码时发现,HttpResponseMessage没有ReadAsAsync<T>()方法。在同事的POC解决方案中进行了一些挖掘,发现ReadAsAsync<T>()实际上是在System.Net.Http.Formatting程序集中的扩展方法。在这个POC解决方案中,有一个对System.Net.Http.Formatting的引用,但它从路径C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies\System.Net.Http.Formatting.dll中获取此文件。
我的问题是,获取访问这个扩展方法的更好解决方法比从本地ASP.Net安装引用这个程序集更好吗?我的担忧是这会导致我们的CI服务器出问题,因为它不太可能安装ASP.Net。我想我可以将System.Net.Http.Formatting复制到解决方案中的Lib目录,但我希望有更好的选择,例如我可能错过的另一个NuGet包,可以给我这个程序集。
谢谢!

如果您想使用汇编语言(无论是扩展方法还是不是),您需要引用它并确保在构建时包含它。C:\Program Files...路径在部署到服务器上时不应该很重要。 - Tim S.
好的,谢谢。不过我确实知道汇编引用是如何工作的。C:\Program Files... 的问题在于这个路径在我们的 CI 服务器上可能不存在。所以我认为,我可以将该程序集复制到我的解决方案下的 Lib 目录中,这样它就会被添加到源代码控制中,并且在 CI 构建解决方案时会被检索到;或者更好的方法是找到其他包含该程序集的 NuGet 包。 - chris.house.00
1个回答

34

这是 WebAPI 客户端库包的一部分。请安装 Microsoft.AspNet.WebApi.Client NuGet 包。


2
这个能在.NET Core上运行吗?我已经添加了这个NuGet包。但它仍然不能工作。我是否缺少一些using语句? - tedi
我安装了它,但是没有任何变化。 - KansaiRobot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接