MVC2 JSON操作,如果我想要RESTful,我应该允许GET,POST还是两者?

时间:2011-01-14 05:55:13

标签: asp.net-mvc json rest

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

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

2 个答案:

答案 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。