1

对不起我的英语不好,但让我们来解决这个问题。

我正在尝试对控制器发生的操作完成POST ,但该操作未收到 POST 并且 javascript 控制台返回此错误 500 Internal Server Error

这是我的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);
 }

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

4

1 回答 1

2

您的操作被修饰[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 请求一起发送到服务器。

于 2013-05-27T13:20:50.563 回答