【问题标题】:Best Way To Consume JSON from REST API in .NET在 .NET 中从 REST API 使用 JSON 的最佳方式
【发布时间】:2012-01-30 17:44:24
【问题描述】:

我正在使用 c# 开发一个 .net Web 应用程序,我需要使用来自第三方的 REST 服务(他们没有使用 WCF)。我来自使用 Web 服务调用的背景,其中有一个可用的 WSDL,Visual Studio 将构建所有底层代码,然后我就可以开始了。

是否没有工具或框架可以在某种程度上模拟这种行为?我知道,如果没有合同,工具就无法知道会发生什么,但我认为我可以通过一个向导来提供参数以进行 REST 调用,然后帮助向导计算出响应的详细信息。在该过程结束时,我将拥有一组对象,这些对象对 REST API 进行建模,类似于 Web 服务的行为方式。

我知道 REST 和 JSON 对它们有一些很大的优势,但缺乏允许自动代码生成的开箱即用标准合同似乎是一个真正的倒退。

我是否遗漏了一些明显的东西,或者这只是在 .NET 中使用 REST 时的当前状态?我真的需要为每个新 API 编写样板代码吗?

【问题讨论】:

  • 我不确定这是否会有所帮助,但您可能想看看 RESTful WCF WADL 项目:wadl.codeplex.com
  • 如果您可以通过端口 80 上的 HTTP 连接到 REST 服务,您应该能够使用 Visual Studio 连接到它并为您生成代码。我错过了什么?
  • Phil 你有这个样本吗?您是否将参考添加为服务参考?例如这个 url link 带回一个有效的 json 对象,你会如何添加它?
  • @phil - 你确定它适用于 RESTful Web 服务吗?

标签: .net rest


【解决方案1】:

您可以查看使用 RestSharp 访问 REST API。我提供了一个示例,包括使用 AutoMapper 从数据传输对象到this SO question 上的域模型的方法。

【讨论】:

    【解决方案2】:

    我建议查看WCF REST Starter Kit All up page

    在此处下载:WCF REST Starter Kit Preview 2

    此处的文档:WCF Rest Starter Kit GUide 向下滚动到“使用 HttpClient 使用 RESTful 服务”

    您最终将使用 ReadAsJasonDataContract,例如

    HttpResponseMessage resp = http.Get("friends_timeline.json");
    resp.EnsureStatusIsSuccessful();
    ProcessStatusesAsDataContract(resp.Content.ReadAsJsonDataContract<statusList>());
    

    这看起来是一个合理的操作方法How-2 on CodeProject

    如果您想多动手并希望获得更多性能,那么执行您自己的 Web 请求并使用 JSON.NET 来处理序列化是另一个不错的选择。 JSON.Net(披露 JSON.Net 是同事写的)

    【讨论】:

    • 我知道如果您运行的是 .NET 3.5,则需要入门工具包,但如果我使用的是 .NET 4 呢?
    • 是的。对不起...应该更清楚。所需的序列化/反序列化类型本身就在 .NET 4 中。
    • REST 入门套件在几年前就已经过时了。这方面的最新工作在这里wcf.codeplex.com
    • @DarrelMiller - WCF REST Starter Kit 可能尚未在积极开发中(我说可能,因为我还没有找到任何说明它已被淘汰的信息),它仍然是在 WCF 文档中作为 .NET 3.5 开发 RESTful Web 服务的 解决方案:msdn.microsoft.com/en-us/netframework/cc950529。我理解您在说什么,但在谈论 .NET 3.5 等旧技术时,您几乎仅限于“过时”技术。
    • @M.Babcock 如果您阅读许可证,您会看到一旦 MS 发布“官方”版本,您就需要升级。 RSK 的正式版本是 .net 4。因此许可证不允许您继续使用 RSK。
    猜你喜欢
    • 2015-03-26
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多