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

Ani*_*nil 22 rest json asp.net-web-api

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

Dav*_*ore 33

简短的回答是肯定的,使用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>();
}
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

关键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