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

时间:2015-07-07 07:01:33

标签: json rest asp.net-web-api

我需要从.NET应用程序访问REST服务,似乎可以使用这两个软件包中的任何一个来完成。我不清楚应该在哪些场景中使用哪个包。谁能为此带来更多的光?

1 个答案:

答案 0 :(得分:32)

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

  

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

     

此软件包添加了对格式和内容协商的支持   System.Net.Http。它包括对JSON,XML和表单URL的支持   编码数据。

Microsoft.AspNet.WebApi.Client实际上依赖于 Microsoft.Net.Http,并扩展了HttpClient以及一些您可能需要与REST服务(如ASP)交谈的功能.NET Web API(例如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