【问题标题】:JsonRequestBehavior.AllowGet Allows PostJsonRequestBehavior.AllowGet 允许发布
【发布时间】: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


【解决方案1】:

默认情况下,MVC 允许发布到操作。

【讨论】:

    猜你喜欢
    • 2013-03-22
    • 2015-11-25
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 2021-01-28
    • 2014-12-20
    相关资源
    最近更新 更多