我正在使用的项目有一大堆JSON操作,以便通过ajax调用填充级联下拉列表。由于它们在技术上是选择查询而我们正在尝试RESTful,因此我们一直使用HttpGet
属性标记这些操作。但是,默认情况下,JsonResult
不允许通过GET返回结果。所以我们必须明确地调用Json(data, JsonRequestBehavior.AllowGet)
。
我想知道的是,这是一种不好的做法吗?我们应该只允许对Json操作发布请求吗?如果它有所不同,那么这是一个企业应用程序,需要登录到特定环境才能访问它。
答案 0 :(得分:2)
在我的实践中,我正在使用下一个规则来决定哪种HTTP方法适用于某种情况:如果您只检索数据然后使用GET,如果您要更改某些内容的状态,请使用POST。
来自www.w3.org:
如果符合以下条件,请使用GET:
- 互动更像是一个问题(即,这是一个安全的问题 查询,读取等操作 操作或查找)。
使用POST if:
- 互动更像是订单,或
- 交互以一种方式改变资源的状态 用户会察觉到(例如,a 订阅服务)或
- 用户要对交互结果负责。
当您需要使用POST时,需要将大量数据发送到服务器时。
如果你的查询字符串长度小于1000,那么就是你。
答案 1 :(得分:1)
正如bniwredyc已经指出的那样,一般的经验法则是仅在操作不改变状态/可重复等时才使用GET,否则使用POST。因此,GET可能适用于您描述的场景。
但是,在某些情况下,返回JSON以响应GET请求可以允许某人窃取该数据(Phil Haack has a nice example)。所以,你必须问自己:数据是否被返回并用于填充下拉列表的机密信息?如果是这样,您可能想要使用POST。如果没有,你可以安全地使用GET。