【问题标题】:Ajax.actionlink() not working with POST method (500 Internal Server Error)Ajax.actionlink() 不适用于 POST 方法(500 内部服务器错误)
【发布时间】:2013-05-27 21:20:50
【问题描述】:

抱歉我的英语不好,但让我们来解决问题。

我正在尝试对控制器发生的动作完成进行 POST, 但该操作没有收到 POST 并且 javascript 控制台返回此错误 500 内部服务器错误

这是我的 Ajax.actionlink()

@Ajax.ActionLink("Complete", "Complete", "Occurrence", new { id = Model.Id }, new AjaxOptions { HttpMethod = "POST" })

这是我的动作完成进入控制器发生

 [HttpPost]
 [ValidateAntiForgeryToken]
 public ActionResult Complete(int id)
 {
     return new HttpStatusCodeResult(200);
 }

有人因同样的情况而过关? 感谢关注!

【问题讨论】:

    标签: ajax asp.net-mvc-4


    【解决方案1】:

    您的操作使用[ValidateAntiForgeryToken] 进行修饰,这意味着它将期望防伪令牌被发送到 POST 请求负载中。事实并非如此。在您的请求中,您只发送了一些 id (new { id = Model.Id })。

    一旦可能的解决方法是使用 Ajax.BeginForm 代替,它将包含防伪令牌:

    @using (Ajax.BeginForm("Complete", "Occurrence", new { id = Model.Id }, new AjaxOptions { HttpMethod = "POST" }))
    {
        @Html.AntiForgeryToken()
        <button type="submit">Complete</button>
    }
    

    Html.AntiForgeryToken() 将生成一个隐藏字段,其中包含所需的防伪令牌,该令牌将与 AJAX 请求一起发送到服务器。

    【讨论】:

    • 非常感谢,现在我知道问题出在哪里了,简直快疯了。
    猜你喜欢
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 2020-10-01
    • 2018-01-15
    相关资源
    最近更新 更多