【问题标题】:ASP.NET Core 6.0 - Delete from database with jQuery.ajax results in POST HTTP 400 ERRORASP.NET Core 6.0 - 使用 jQuery.ajax 从数据库中删除导致 POST HTTP 400 错误
【发布时间】:2022-01-24 16:19:11
【问题描述】:

我一周前开始学习 ASP.NET Core 6.0。我已经与 SignalR 进行了实时聊天,我还将消息保存到我的数据库中。

就目前而言,它只是一个表格,每一行在不同的列中包含用户名、消息和一个删除按钮。随着新消息的到来,我将添加新行。

问题是我的删除按钮不起作用。

在控制台中我收到:POST https://localhost:7122/Chat/DeleteMessage/1 400 错误消息。

按钮:

 <input type="button" onclick="Delete(@obj.Id)" value="Delete"/>

脚本:

<script>
function Delete(id) {
$.ajax({
     url: "/Chat/DeleteMessage/" + id,
      type: "POST",
  })
}
</script>

还有控制器:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public IActionResult DeleteMessage(int id)
    {
        db.Chat.Remove(db.Chat.Find(id));
        db.SaveChanges();
        return RedirectToAction("Index");
    }

【问题讨论】:

  • 你需要调试你的服务器端代码,看看那里实际发生了什么。
  • 嘿,首先,就 HTTP 方法而言,您应该使用 DELETE 而不是 POST。其次,您的 DeleteMessage 端点是否实际运行?由于您的 HttpPost 装饰器中没有指定路由参数
  • 嘿!问题是 [ValidateAntiForgeryToken]。删除它后,代码运行完美。此外,我现在已经按照您对脚本中 [HttpDelete] 和“DELETE”的建议更改了我的代码。虽然我不知道有什么区别。
  • 问题是你使用 POST 但你没有发布任何数据,这会给你一个 400 - bad request。
  • 您也可以尝试将 AntiFororgoryToken 添加到 ajax header 中。

标签: jquery ajax asp.net-core sql-delete


【解决方案1】:

您也可以尝试将 AntiFororgoryToken 添加到 ajax 标头中。这是一个演示:

@Html.AntiForgeryToken()

js:

<script>
function Delete(id) {
$.ajax({
     url: "/Chat/DeleteMessage/" + id,
headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() },
      type: "POST",
  })
}
</script>

【讨论】:

    【解决方案2】:

    这太愚蠢了,但问题是[ValidateAntiForgeryToken]

    我刚刚注意到 Debug 输出中的错误,所以我将其删除,现在它可以正常工作了。

    【讨论】:

      【解决方案3】:

      使用发布请求发送 AF 令牌或删除 [ValidateAntiforgeryToken] 属性应该可以工作。

      【讨论】:

        猜你喜欢
        • 2019-06-19
        • 2021-02-25
        • 2022-11-13
        • 2018-08-13
        • 2017-07-23
        • 1970-01-01
        • 2021-05-19
        • 2014-05-14
        • 2020-10-12
        相关资源
        最近更新 更多