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

标签 json rest asp.net-web-api

我需要从.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/

相关文章:

javascript - 初始加载和更新之间的 SignalR

entity-framework - Entity Framework + Java 脚本客户端

azure - 当我发布到 Azure 时,Serilog WriteTo.RollingFile 似乎会创建 500 错误代码

json - Serde反序列化为多个结构之一?

python - 将一个休息资源路由为第二个休息资源的子资源

javascript - 加载多个 json 文件并使用 ajax 和 jquery 将其显示到 html

java - 对于PreparedStatement 类型,方法 getInt、getString 和 getDate 未定义

java - Jackson 对象映射 - 将传入的 JSON 字段映射到基类中的 protected 属性

c# - 有什么方法可以对 List<T> 的子类进行 JSON.NET 序列化,该子类也具有额外的属性?

javascript - 如何从 jQuery Ajax 访问 JSON 元素