Microsoft.Net.Http 与 Microsoft.AspNet.WebApi.Client

Posted

技术标签:

【中文标题】Microsoft.Net.Http 与 Microsoft.AspNet.WebApi.Client【英文标题】:Microsoft.Net.Http vs Microsoft.AspNet.WebApi.Client 【发布时间】:2015-09-24 13:03:58 【问题描述】:

我需要从 .NET 应用程序访问 REST 服务,似乎可以使用这两个包中的任何一个来完成。我不清楚在哪种情况下应该使用哪个包。谁能带来更多的启示?

【问题讨论】:

反对投票者:想详细说明这个问题有什么问题?! 这是个好问题。 Downvoter 不明白。 【参考方案1】:

简短的回答是肯定的,使用Microsoft.AspNet.WebApi.Client

https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Client/

这个包增加了对格式化和内容协商的支持 系统.Net.Http。它包括对 JSON、XML 和表单 URL 的支持 编码数据。

Microsoft.AspNet.WebApi.Client 实际上依赖 Microsoft.Net.Http,并扩展了HttpClient 的更多功能,您可能需要与 ASP.NET Web API 等 RESTful 服务(例如JSON 和 XML 支持)。

这两个包都在 System.Net.Http 命名空间中运行,并围绕 HttpClient 类的键。

Microsoft.AspNet.WebApi.Client 包包含 System.Net.Http.Formatting.dll 程序集,它为 HttpClient 和 HttpContent(以及其他)添加了一些方便的扩展方法。

例如:

using (var client = new HttpClient())

    var response = await client.GetAsync("http://localhost/foo/api/products/1");
    response.EnsureSuccessStatusCode();
    var product = await response.Content.ReadAsAsync<ProductInfo>();

ReadAsAsync 方法是Microsoft.AspNet.WebApi.Client 添加到HttpContent 对象的扩展方法。这会自动确定响应是 JSON、XML 还是表单 URL 编码(上述内容协商),然后使用相应的格式化程序将其反序列化为您的强类型模型(在本例中为 ProductInfo)。

如果您尝试仅使用 Microsoft.Net.Http,您将无法使用 ReadAsAsync 方法,并且您只能以字节或字符串等原始数据的形式读取内容,并且必须这样做序列化/反序列化自己。

您还可以使用 JSON 或 XML 格式的 PUT/POST 扩展方法返回到服务,而无需自己动手:

    // Save the ProductInfo model back to the API service
    await client.PutAsJsonAsync("http://localhost/foo/api/products/1", product);

关键的 Microsoft.AspNet.WebApi.Client 扩展:

https://msdn.microsoft.com/en-US/library/system.net.http.httpclientextensions.aspx https://msdn.microsoft.com/en-US/library/system.net.http.httpcontentextensions.aspx

【讨论】:

以上是关于Microsoft.Net.Http 与 Microsoft.AspNet.WebApi.Client的主要内容,如果未能解决你的问题,请参考以下文章

5 .NET HTTP 库 - Microsoft.Net.Http 适合哪里?

使用 Microsoft.Net.Http 将文件发送到服务

如何将此 .NET RestSharp 代码转换为 Microsoft.Net.Http HttpClient 代码?

如何使用Visual Studio Express 2012升级nuget

Microsoft launches Open Application Model (OAM) and Dapr to ease developments in Kubernetes and micr

如何在 .NET 测试中传入模拟的 HttpClient?