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