我需要从.NET应用程序访问REST服务,似乎可以使用这两个软件包中的任何一个来完成。我不清楚应该在哪种情况下使用哪个软件包。谁能给这个带来更多的光?
最佳答案
简短的答案是,使用Microsoft.AspNet.WebApi.Client
。
https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Client/
This package adds support for formatting and content negotiation to System.Net.Http. It includes support for JSON, XML, and form URL encoded data.
Microsoft.AspNet.WebApi.Client
实际上取决于Microsoft.Net.Http
,并将HttpClient
扩展为您可能需要与RESTful服务(如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
关于json - Microsoft.Net.Http与Microsoft.AspNet.WebApi.Client,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31261849/