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

MVC控制器Action接收AJAX POST请求始终返回400错误求助

解决ASP.NET MVC中AJAX POST请求返回400错误的问题

你的POST请求返回400错误,核心原因有两个:缺少防伪令牌验证、请求数据格式不匹配导致模型绑定失败,以下是具体解决方案:

1. 补充防伪令牌验证

你的控制器Action添加了[ValidateAntiForgeryToken]特性,但AJAX请求未携带防伪令牌,这是400错误的最直接原因。

步骤:

  • 在视图页面(如DayTrial.cshtml)中添加防伪令牌:
@Html.AntiForgeryToken()
  • 修改AJAX函数,在请求头中携带该令牌:
async function SaveTheDay(url, data) {
    if (data != null) {
        // 获取页面中的防伪令牌
        const antiForgeryToken = $('input[name="__RequestVerificationToken"]').val();
        $.ajax({
            url: url,
            type: 'POST',
            dataType: "json",
            contentType: "application/json", // 指定请求内容为JSON格式
            data: JSON.stringify(data), // 将JS对象序列化为JSON字符串
            headers: {
                // 把防伪令牌放入请求头
                "RequestVerificationToken": antiForgeryToken
            },
            success: function (response) {
                console.log("Ok");
            },
            error: function (req, status, error) {
                console.log("error "+status+"    "+error);
            }
        })
    }
}

2. 确保请求数据格式与模型匹配

默认情况下jQuery的$.ajax会把data对象转为form-urlencoded格式,但ASP.NET MVC绑定复杂模型时更适合JSON格式,因此必须设置contentType: "application/json"并将数据序列化为JSON字符串(JSON.stringify(data))。

3. 优化控制器返回(可选)

因为是AJAX请求,返回JsonResult比返回View更符合前端预期:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> SaveDay(InfoDay day)
{
    // 这里添加你的业务逻辑,比如保存数据到数据库
    return Json(new { success = true });
}

排查其他可能问题

  • 打开浏览器开发者工具的Network标签,查看POST请求的Payload是否和InfoDay类的属性完全匹配(注意数据类型:比如userId必须是整数,date必须是字符串)
  • 查看Response的详细错误信息,400错误通常会明确提示具体原因(如"缺少防伪令牌"、"模型绑定失败")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:40:31