【发布时间】:2015-03-05 21:23:53
【问题描述】:
我有以下代码:
public ActionResult ReadEmployee([DataSourceRequest]DataSourceRequest request)
{
return Json(GetEmployees().ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}
我几乎从 Kendo Grid 网站复制和粘贴了一些假设,例如我必须从我的视图中发出 Ajax Get 请求才能调用此方法。然而,结果发现,网格的默认行为实际上是每次返回控制器时的 Post 并且它起作用了!!
这真的让我很困惑,因为我真的认为我会因为
而看到一些错误JsonRequestBehavior.AllowGet
但它正在满足请求。我这里有什么遗漏吗?
【问题讨论】:
-
默认行为是允许 POST 但拒绝 GET(这就是为什么您需要
.AllowGet才能发出 GET 请求)。 This answer 解释更详细。 -
POST 本质上能够改变服务器的状态,这不是有点反直觉吗。这默认情况下不受 MVC 保护,但 GET 是因为我们担心有人会看到他们不应该看到的敏感信息。他们不允许更改的敏感信息怎么办?
-
@CoffeeBean 它与 GET 暴露的跨站点请求伪造 (CSRF/XSRF) 攻击有关。当通过脚本标签调用端点时,外部站点可能会读取数据。该框架默认禁用了 GET,因此开发人员必须做出明智的决定才能启用它。
-
如果你把它放在一个答案中,那么我可以选择它作为答案并关闭线程:)
标签: json asp.net-mvc asp.net-mvc-4 http-post