【问题标题】:JsonRequestBehavior.AllowGet does not work with HttpGetJsonRequestBehavior.AllowGet 不适用于 HttpGet
【发布时间】:2017-03-25 04:32:13
【问题描述】:

我已经阅读了 JsonRequestBehavior.AllowGet 的 MSDN 文档以及 SO 的许多答案。我尝试过,但我仍然感到困惑。

我有以下操作方法。如果我在我的 ajax 调用中使用 POST 方法,它工作正常。如果我在我的 ajax 调用中使用 GET 方法,它会失败并显示状态 404(找不到资源)。那么,问题是 JsonRequestBehavior.AllowGet 枚举在这个 Json 方法中到底做了什么? MSDN 文档说:允许来自客户端的 AllowGet HTTP GET 请求。 (https://msdn.microsoft.com/en-us/library/system.web.mvc.jsonrequestbehavior(v=vs.118).aspx),但是当我在 ajax 调用中使用 GET 方法时为什么会失败?将属性从 HttpPost 更改为 HttpGet 没有帮助,使用 POST 或 GET 方法都会失败。

 [HttpPost]
    public JsonResult Create(Model m)
    {
        m.Ssn = "123-45-8999";
        m.FirstName = "Aron";
        m.LastName = "Henderson";
        m.Id = 1000;
        return Json(m, JsonRequestBehavior.AllowGet);
    }

    public class Model
    {
       public int Id { get; set; }
       public string Ssn { get; set; }
       public string FirstName { get; set; }
       public string LastName { get; set; }
    }

这是我的 jQuery ajax 调用:

    $(function () {
        console.log("hola");

        $("button").on("click", function () {
            $.ajax({
                method: "POST", //Try changing this to GET and see.
                url: "Home/Create",
                data: { Id: 123, Ssn: "585-78-9981", FirstName: "John", LastName: "Smith" }
            })
    .done(function (msg) {
        alert("Data Saved: " + msg);

        });

  });

    })

【问题讨论】:

    标签: asp.net ajax asp.net-mvc


    【解决方案1】:

    404 (Resource not found) 表示方法未找到(与JsonRequestBehavior 无关)。

    更改要使用的 ajax

    $.ajax({
        url: "/Home/Create", // note leading forward slash
        ....
    

    或者更好的是,使用url: '@Url.Action("Create", "Home")', 来正确生成您的网址。

    【讨论】:

    • 这并不能解释为什么当我简单地使用 POST 方法时它会起作用。
    • 查看错误消息的详细信息,尤其是它试图向其发出请求的实际 url:)
    • 如果 url 正确且它是 GET,您将得到一个 500 (Internal Server Error),但缺少 JsonRequestBehavior.AllowGet
    • 是的,你是对的,前导斜线是关键。谢谢。刚测试过。 POST 在没有前导斜杠的情况下工作。但 GET 似乎坚持使用前导斜线。如果我删除 JsonRequestBehavior.AllowGet,那么 GET 方法将按预期失败。
    【解决方案2】:

    404 是由于属性,与 JSON 上的“AllowGet”无关。

    您需要一个或另一个 [HttpVERB] 属性...而不是两个属性。

    如果这是您的方案,这将起作用。

       [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
    

    你应该看看这个well documented post

    AllowGet 将简单地允许 JSON 响应在 GET 场景中正常工作,无一例外。如果你不这样做,你会看到这个message

    此请求已被阻止,因为敏感信息可能会被 在 GET 请求中使用时向第三方网站披露。 要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 2015-02-23
      • 1970-01-01
      相关资源
      最近更新 更多