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

MVC Core 2中Ajax POST请求报Bad Request问题求助

解决ASP.NET Core 2中Ajax POST请求报Bad Request的问题

看起来你在从传统ASPX迁移到ASP.NET Core 2的过程中遇到了POST请求的坑,我帮你梳理几个关键问题点,应该能解决这个Bad Request的问题:

1. 先修复Ajax请求里的data参数(最可能的元凶)

你当前的Ajax代码里写了data: JSON.stringify()——这个写法会生成字符串"undefined",而ASP.NET Core对application/json类型的请求体校验很严格,"undefined"并不是合法的JSON格式,直接就会返回400 Bad Request。

如果你的接口不需要传递任何参数,要么直接去掉data属性,要么传入空对象转成合法的JSON:

function get_Data() {
 $.ajax({
 type: "POST",
 contentType: "application/json; charset=utf-8",
 url: "/Home/Get_Index_Values",
 data: JSON.stringify({}), // 空对象生成合法的{},避免解析错误
 dataType: "json"
 })
 .done(function(response) { // 注意是小写的done,不是你写的Done
     // 这里写成功后的处理逻辑
 })
 .fail(function(ts){ 
     // 建议打印responseText看具体错误详情,比response更有用
     alert(ts.responseText); 
 })
}

2. 确保控制器方法的配置正确

即使不需要参数,也要让ASP.NET Core能正确识别这是一个POST接口:

  • 保留[HttpPost]特性,同时明确返回JsonResult(和之前GET的签名保持一致更清晰):
[HttpPost]
public JsonResult Get_Index_Values() 
{ 
    // 你的业务逻辑代码
    return Json(/* 这里返回要给前端的数据 */);
}
  • 如果你的项目用了属性路由,记得给控制器或方法加上路由特性,比如在HomeController上加上:
[Route("[controller]/[action]")]
public class HomeController : Controller
{
    [HttpPost]
    public JsonResult Get_Index_Values() 
    { 
        // ...
    }
}

这样就能确保/Home/Get_Index_Values这个URL能正确匹配到方法。

3. 检查Ajax的回调方法大小写

你代码里写的.Done({})是错误的——jQuery的Ajax成功回调是小写的.done(),虽然这个不是Bad Request的直接原因,但会导致成功回调无法执行,后续调试也会混乱,赶紧改掉。

4. 查看具体的错误详情

建议打开浏览器的开发者工具->网络面板,找到这个POST请求,查看它的响应内容——ASP.NET Core在开发环境下会返回非常详细的错误信息(比如JSON解析失败、路由不匹配等),这能帮你快速定位问题根源。

5. 验证路由是否真的匹配

如果上面的步骤都试了还是不行,可以在控制器方法里打个断点,看请求是否能到达:

  • 如果断点没命中,说明路由不匹配,检查Startup.cs里的路由配置,或者用app.UseDeveloperExceptionPage();(开发环境下)查看路由匹配的详细日志。

本质上,这个问题最可能的原因就是无效的JSON请求体导致ASP.NET Core的模型绑定失败——旧的ASPX对这种情况的处理比较宽松,但Core版本的校验更严格,这也是迁移时容易踩的坑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:05:11