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

使用jQuery .ajax()向ASP.NET MVC Kestrel控制器提交数据时遇HTTP 400错误

解决Kestrel Web应用中AJAX注册请求返回HTTP 400错误的方案

常见错误原因及对应解决方案

1. 控制器方法未添加[FromBody]特性

ASP.NET Core不会自动从JSON格式的请求体中绑定参数,必须显式添加[FromBody]特性才能正确解析请求数据,这是导致400错误的最常见原因。

修正后的控制器代码示例:

[HttpPost]
[Consumes("application/json")]
public IActionResult AddUserToDatabase([FromBody] UserModel user)
{
    // 写入SQLite数据库逻辑
    // 示例:_dbContext.Users.Add(new User { UserName = user.UserName });
    // _dbContext.SaveChanges();
    return Ok("注册成功");
}

// 匹配请求的模型类
public class UserModel
{
    public string UserName { get; set; }
}

2. AJAX请求数据序列化不规范

要确保AJAX传递的JSON结构和控制器接收的模型完全匹配,且必须用JSON.stringify()正确序列化数据,不能直接传递字符串。

修正后的AJAX代码:

$("#registerBtn").click(function() {
    var userName = $("#userNameInput").val();
    $.ajax({
        url: "/Session/AddUserToDatabase",
        type: "POST",
        contentType: "application/json",
        dataType: "json",
        data: JSON.stringify({ UserName: userName }), // 键名必须和模型属性名一致
        success: function(res) {
            alert(res);
        },
        error: function(xhr) {
            console.log("错误状态:" + xhr.status + ",信息:" + xhr.responseText);
        }
    });
});

3. CSRF令牌验证失败

ASP.NET Core默认启用CSRF保护,AJAX请求如果未携带CSRF令牌,会直接返回400错误。

解决方案:

  • 先在HTML页面中添加CSRF令牌的meta标签:
<meta name="csrf-token" content="@Html.AntiForgeryToken()" />
  • 在AJAX请求中携带令牌:
$.ajax({
    // 其他配置项
    headers: {
        "RequestVerificationToken": $('meta[name="csrf-token"]').attr('content')
    },
    // ...
});
  • 测试阶段可临时禁用验证(生产环境不推荐):在控制器方法上添加[IgnoreAntiforgeryToken]特性。

4. 路由路径不匹配

检查AJAX的url是否和控制器的路由配置一致。比如如果控制器使用了路由特性:

[Route("api/[controller]")]
public class SessionController : ControllerBase
{
    [HttpPost("AddUser")]
    public IActionResult AddUserToDatabase([FromBody] UserModel user)
    {
        // ...
    }
}

此时AJAX的url必须写为"/api/Session/AddUser",而非"/Session/AddUserToDatabase"。

5. 模型验证失败

如果模型添加了数据验证规则(比如[Required]),提交空用户名会导致模型绑定失败,返回400错误。可以在控制器中主动验证模型状态,返回具体错误信息:

[HttpPost]
[Consumes("application/json")]
public IActionResult AddUserToDatabase([FromBody] UserModel user)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState); // 返回具体的验证错误,方便调试
    }
    // 数据库操作逻辑
    return Ok();
}

// 带验证规则的模型类
public class UserModel
{
    [Required(ErrorMessage = "用户名不能为空")]
    public string UserName { get; set; }
}

调试建议

  • 打开浏览器开发者工具(F12),查看「网络」标签的请求详情:检查请求体的JSON格式是否正确,查看响应的具体错误信息。
  • 在控制器方法第一行加断点,确认方法是否被命中——如果没命中,说明路由或请求格式有问题。
  • 检查SQLite数据库连接字符串是否正确,确保应用有读写数据库的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:55:44