Asp.net mvc MVC2 JSON操作,如果我想成为RESTful,我应该允许GET、POST还是两者都允许?

Asp.net mvc MVC2 JSON操作,如果我想成为RESTful,我应该允许GET、POST还是两者都允许?,asp.net-mvc,json,rest,Asp.net Mvc,Json,Rest,我目前正在工作的项目有一大堆JSON操作,以便通过ajax调用填充级联下拉列表。由于它们在技术上是Select查询,并且我们试图实现REST功能,所以我们一直使用HttpGet属性标记这些操作。但是,默认情况下,JsonResult不允许通过GET返回结果。所以我们必须显式地调用Json(data,JsonRequestBehavior.AllowGet) 我想知道的是,这种做法不好吗?我们应该只允许对Json操作进行Post请求吗?如果有区别的话,这是一个企业应用程序,需要先登录到特定的环境,

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


我想知道的是,这种做法不好吗?我们应该只允许对Json操作进行Post请求吗?如果有区别的话,这是一个企业应用程序,需要先登录到特定的环境,然后才能访问它。

在我的实践中,我使用下一个规则来决定哪种HTTP方法适合于某种情况:如果只检索数据,则使用GET;如果要更改某个内容的状态,则使用POST

发件人:

在以下情况下使用GET:

  • 互动更像是一个问题(即,它是一个安全的问题
    操作,如查询、读取 操作或查找)
在下列情况下使用POST:

  • 这种互动更像是一种秩序,或者说
  • 交互会以 用户将感知到(例如 订阅服务),或
  • 用户必须对交互的结果负责
需要使用POST的另一种情况是,必须向服务器发送大量数据


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

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


但是,在某些情况下,返回JSON以响应GET请求可能会允许有人窃取该数据()。因此,您必须扪心自问:返回并用于填充下拉列表的数据是否机密?如果是这样的话,你可能想要一个帖子。如果没有,您可以安全地使用GET。

这与我们遵循的规则基本相同。我想询问您关于查询字符串大小的最后一条评论。大多数GET操作(我现在谈论的是所有操作,而不仅仅是json)通常都有小的查询字符串。实际上,我没有看到大查询字符串有任何明显的缺点。这是关于url max langth的老生常谈——看看这个问题:如果你能在浏览器中打开url,它可以让调试变得更容易——仅此而已。