You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core MVC+Razor中POST控制器返回400错误请求的问题排查

问题原因及解决办法

核心原因

ASP.NET Core默认启用了跨站请求伪造(CSRF/XSRF)保护,你的AJAX POST请求未携带有效的防伪造令牌,因此服务器返回400 Bad Request。

解决步骤

1. 在视图中生成防伪造令牌

在Add.cshtml视图内添加代码生成令牌:

@inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Antiforgery
@{
    var token = Antiforgery.GetAndStoreTokens(Context).RequestToken;
}

如果视图内有表单,也可以直接使用@Html.AntiForgeryToken()生成令牌字段,AJAX场景推荐用上述方式直接获取请求令牌。

2. AJAX请求中携带令牌

修改AJAX代码,在请求头中加入防伪造令牌:

$.ajax({
  method: "POST",
  success: console.log,
  url: "/Cart/Add",
  headers: {
    "RequestVerificationToken": "@token"
  }
});

3. 可选:给POST方法显式添加验证特性

虽然MVC控制器POST方法默认会启用CSRF验证,但显式添加特性更清晰:

[HttpPost("Add"), ActionName("Add"), ValidateAntiForgeryToken]
public IActionResult PostAdd() 
{
    return this.View();
}

额外说明

  • 若确实无需CSRF保护(仅建议公开API场景使用),可在目标方法上添加[IgnoreAntiforgeryToken]特性,或全局禁用,但这会引入安全风险,需谨慎操作。
  • 你的Startup配置无问题,AddControllers()和MapControllers()已正确注册控制器路由,问题根源不在路由配置。

内容的提问来源于stack exchange,提问作者PhoenixXKN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 08:15:43