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

将ABP MVC应用从.NET Framework迁移到.NET Core后Abp.ajax调用失败

问题解决步骤

你的问题核心是ASP.NET Core MVC与原.NET Framework MVC在请求绑定逻辑上的差异,加上ABP AJAX请求的配置缺失导致的。以下是具体解决方法:

1. 为控制器参数添加[FromBody]特性

ASP.NET Core MVC默认不会自动从JSON请求体绑定复杂对象,需要明确指定[FromBody]告知框架从请求体解析数据:

public class BookMgmController : AbpController {
    ...

    [HttpPost]
    public async Task<JsonResult> Pay([FromBody] PayRequestVM input) { // 新增[FromBody]
        ...
    }
}

2. 调整AJAX请求的Content-Type

原代码中未指定请求的Content-Type为application/json,ASP.NET Core会将请求视为表单数据解析,导致无法匹配JSON格式的参数。修改JS代码:

var input = {
    customerName: 'Gino',
    customerSurname: 'Latino',
    payAllAmount: true
};

abp.ajax({
    url: '/BookMgm/Pay',
    type: 'POST',
    contentType: 'application/json', // 新增此行
    data: JSON.stringify(input)
});

3. 配置MVC的JSON序列化选项

确保ASP.NET Core能正确处理驼峰命名到帕斯卡命名的属性映射,在Program.cs中添加以下配置:

builder.Services.AddControllersWithViews()
    .AddJsonOptions(options =>
    {
        // 允许不区分大小写匹配属性名,兼容驼峰与帕斯卡命名
        options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
        // 保持模型的帕斯卡命名策略,与前端驼峰自动映射
        options.JsonSerializerOptions.PropertyNamingPolicy = null;
    });

完成以上三步后,控制器就能正确接收前端传递的参数了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 10:33:14