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

.NET 4.8升级到Core 7后XMLHttpRequest传值为null的问题

.NET 4.8升级到.NET Core 7后XMLHttpRequest传值返回null的问题分析与解决

核心原因:模型绑定规则的差异

.NET Framework的ASP.NET MVC模型绑定器兼容性较强,会自动尝试从JSON请求体、表单、查询字符串等多个位置匹配简单类型参数;而.NET Core的模型绑定规则更严格,默认情况下不会自动从JSON请求体绑定简单类型参数,必须显式指定绑定源,同时前端构造的JSON格式错误也会加剧这个问题。

前端代码的问题点

你在构造请求参数时,给JSON.stringify(dataPacket)额外套了一层单引号:

var params = '{"SentData": \'' + JSON.stringify(dataPacket) + '\'}';

这会导致最终发送的JSON中,SentData的值是带单引号的嵌套字符串(比如{"SentData": "'{\"key\":\"value\"}'"}),不符合标准JSON格式,.NET Core的JSON解析器无法正确解析,直接导致参数为null。

解决方案

方案1:给后端参数添加[FromBody]特性并修正前端JSON格式

后端修改代码,显式指定参数从请求体绑定:

public ActionResult ExportToExcel([FromBody] string SentData)
{
    // 业务逻辑处理
}

前端修正参数构造方式,用JSON.stringify正确序列化整个对象,去掉多余的单引号:

// 传递dataPacket的JSON字符串形式
var params = JSON.stringify({ SentData: JSON.stringify(dataPacket) });
// 若dataPacket本身是字符串,直接传递即可
// var params = JSON.stringify({ SentData: dataPacket });

req.send(params);

方案2:使用复杂DTO类型接收(推荐)

定义一个与请求结构匹配的DTO类:

public class ExportExcelRequest
{
    public string SentData { get; set; }
}

后端方法改为接收该DTO,并添加[FromBody]特性:

public ActionResult ExportToExcel([FromBody] ExportExcelRequest request)
{
    string sentData = request.SentData;
    // 业务逻辑处理
}

前端参数构造方式和方案1一致,用JSON.stringify正确序列化对象。

关键差异点总结

  • .NET Framework MVC:模型绑定器自动兼容多种参数来源,对非标准JSON格式的容忍度较高。
  • .NET Core:默认仅从路由、查询字符串绑定简单类型,必须用[FromBody]指定从JSON请求体读取;同时JSON解析器严格遵循标准格式,错误格式的内容会直接导致绑定失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:02:29