【问题标题】:MVC2 JSON action, if I want to be RESTful should I allow GET, POST, or Both?MVC2 JSON 操作,如果我想成为 RESTful,我应该允许 GET、POST 还是两者?
【发布时间】:2011-01-14 05:55:12
【问题描述】:

我目前正在工作的项目有一大堆 JSON 操作,以便通过 ajax 调用填充级联下拉列表。由于它们在技术上是 Select 查询,并且我们正在尝试使用 RESTful,因此我们一直使用 HttpGet 属性标记这些操作。但是默认情况下,JsonResult不允许通过 GET 返回结果。所以我们不得不显式调用Json(data, JsonRequestBehavior.AllowGet)

我想知道的是,这是不好的做法吗?我们应该只允许对我们的 Json 操作发出 Post 请求吗?如果有所不同,这是一个企业应用程序,需要登录到特定环境才能访问。

【问题讨论】:

    标签: asp.net-mvc json rest


    【解决方案1】:

    在我的实践中,我使用下一条规则来确定哪种 HTTP 方法适合某种情况:如果您只检索数据,则使用 GET,如果您要更改某物的状态,则使用 POST。

    来自www.w3.org

    在以下情况下使用 GET:

    • 交互更像是一个问题(即,它是一个安全的
      查询、读取等操作 操作或查找)。

    在以下情况下使用 POST:

    • 交互更像是一个订单,或者
    • 交互以某种方式更改资源的状态 用户会感知到(例如,一个 订阅服务),或
    • 用户应对交互结果负责。

    您需要使用 POST 的其他情况是您必须向服务器发送大量数据。

    如果您的查询字符串的长度小于 1000,则 GET 适合您。

    【讨论】:

    • 这与我们遵循的规则几乎相同。我想询问您关于查询字符串大小的最后评论。我们的大多数 GET 操作(我现在谈论的是所有操作,而不仅仅是 json)通常都有小的查询字符串。
    • 实际上我没有看到大查询字符串有任何明显的缺点。 url max langth 是老生常谈了 - 看看这个问题:stackoverflow.com/questions/417142/… 如果你可以在浏览器中打开 url,它可以使调试更容易 - 仅此而已。
    【解决方案2】:

    正如 bniwredyc 已经指出的那样,一般的经验法则是仅在操作不改变状态/可重复等情况下使用 GET,否则使用 POST。因此,GET 可能适用于您所描述的场景。

    但是,在某些情况下,返回 JSON 以响应 GET 请求可能会允许某人窃取该数据 (Phil Haack has a nice example)。因此,您必须问自己:返回并用于填充下拉列表的数据是否保密?如果是这样,您可能想要使用 POST。如果没有,您可以安全地使用 GET。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-25
      • 1970-01-01
      • 1970-01-01
      • 2014-01-19
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      相关资源
      最近更新 更多