将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
相关产品推荐
相关产品推荐

