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的主要内容,如果未能解决你的问题,请参考以下文章