【问题标题】:sending a json string in a http url在 http url 中发送 json 字符串
【发布时间】:2012-09-26 00:20:31
【问题描述】:

我正在将数据从我的 Android 应用程序发送到我编写为 asp.net web api 的 REST 服务。我已经成功发送了诸如

之类的网址

http://www.deanblakely.com/REST/api/products/3 并处理 web.api 中的参数。

现在,在Android客户端中,我使用GSON将复杂对象转换为json字符串,字符串如下:

[{"TStamp":"Sep 25, 2012 5:04:46 PM","emailaddress":"webapi@restserver.com","altitude":0.0,"latitude":3.3743984E7,"longitude" :-1.18107841E8,"legnum":1}]

如何将这个 json 字符串放入 url?例如我可以把它放在斜线之间吗?比如http://www.deanblakely.com/REST/api/objects/{"TStamp":"Sep 25, 2012 5:04:46 PM","emailaddress":"webapi@restserver.com","altitude":0.0,"latitude":3.3743984E7,"longitude ":-1.18107841E8,"legnum":1} ??

PS。我在 web.api 上的所有方法都是 Gets。我想保持这种方式,因为它更简单。如果您对此策略有疑问,请参阅:http://forums.asp.net/t/1843826.aspx/1?Web+api+CRUD+Operations

谢谢,院长

【问题讨论】:

    标签: android json rest asp.net-web-api restful-architecture


    【解决方案1】:

    对于 RESTful Web api,a get 应该是 not modify state 或服务器上的资源。

    将参数放入查询字符串 URL 通常是针对 REST 资源的 GET 请求完成的。

    从您的问题中可以看出,通过 GET 完成所有操作并不简单。当您尝试通过更适合作为 GET 上的过滤器选项的查询字符串发布更复杂的对象和图形时,这并不典型并且会引入许多问题。

    如果您将此类对象的 JSON 表示形式发送到服务器 Web api,则通常是在进行创建或更新。将其序列化为 JSON 并将其放入正文中会更容易。

    如果您正在创建资源,则执行 POST 并将 JSON 对象放入请求的正文中。

    如果您正在进行更新,(可能因为您有 /3),然后对 url 执行 POST、PUT 或 PATCH 请求,并将 json 对象放入正文中。 PUT 意味着完全替换资源,而不是部分更新的 PATCH。

    由于您使用的是 ASP.net web api,因此这里是使用 CRUD 操作的演练。在 fiddler 运行的情况下完成它:

    http://www.asp.net/web-api/overview/creating-web-apis/creating-a-web-api-that-supports-crud-operations

    【讨论】:

    • 我的问题是“如何将 json 字符串放入 HTTP URL。”你能回答这个问题吗?我有一段时间得到答案。您在这里的回答很有趣,并且与我的其他帖子有关:forums.asp.net/t/1843826.aspx/1?Web+api+CRUD+Operations。简而言之,世界比 get、put 和 post 更复杂。我正在镜像我的 WCF 服务,这些服务可以在一次调用中完成所有这些以及更多。
    • 你很难得到答案的原因是它不是使用 REST 服务的正确方法,最终会出现问题(最大 url 长度、编码数据等......)。正确的方法是在 body 中传递结构化的 REST 数据。
    • 我现在知道如何做,例如,在其实体参数中包含 json 字符串的帖子。如果我的 asp.net web api 可以从该帖子返回另一个 json 字符串,那么我可以将帖子用于所有内容。我要做的就是传递大型复杂数据并取回大型复杂数据。你认为帖子会这样做吗?谢谢
    • POST 有响应,响应也有正文。因此,您可以在 POST 的正文中发布复杂的 JSON,然后响应将是 200,其中包含正文中的数据。我看到的另一种模式是响应正文中的 url 引用了一些其他复杂的数据供客户端获取,但这增加了另一个请求。
    猜你喜欢
    • 1970-01-01
    • 2020-12-02
    • 2016-11-07
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    相关资源
    最近更新 更多