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

通过Ajax Post从JS向.NET控制器传递JSON数据时列表为空的问题

通过Ajax Post从JS向.NET控制器传递JSON数据时列表为空的问题

嘿,我看你遇到了前端传JSON数组到.NET控制器但接收的列表为空的问题,我来帮你梳理下最常见的排查点和解决办法!

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

当你用contentType: "application/json"发送JSON数据时,.NET默认不会自动从请求体里解析数据到参数中,必须显式加上[FromBody]标记,告诉框架从请求体读取并反序列化。

比如你的控制器方法应该改成这样:

[HttpPost]
public IActionResult SubmitMovieAdd([FromBody] List<MovieSchedule> schedules)
{
    // 这里就能拿到正确的列表数据了
    return Ok();
}

2. 确保后端模型类和前端JSON字段匹配

你前端传递的是包含date和hours字段的对象数组,后端需要定义对应的模型类,并且属性要和前端字段对应(.NET默认支持驼峰和帕斯卡命名的自动匹配,但如果遇到问题可以显式指定):

public class MovieSchedule
{
    // 如果前端是小写的date,这里用大写Date也能匹配,或者显式指定字段名
    // [JsonPropertyName("date")]
    public string Date { get; set; }

    // 根据前端hours的类型调整,比如如果是字符串数组就用List<string>或string[]
    public List<string> Hours { get; set; }
}

⚠️ 注意:模型类必须是public,并且要有无参构造函数(默认会自动生成,但如果你手动加了有参构造,记得补上无参的)。

3. 验证前端发送的JSON格式合法性

你已经用console.log(JSON.stringify(dataToSend))打印了发送的内容,一定要确认输出的是合法的JSON数组,比如类似这样:

[{"date":"2024-05-20","hours":["10:00","14:00"]},{"date":"2024-05-21","hours":["11:00","15:00"]}]

如果JSON格式有语法错误(比如引号不闭合、逗号多余),.NET会无法解析,导致列表为空。

4. 针对老版本.NET Framework的额外配置

如果你用的是.NET Framework(不是.NET Core/.NET 5+)的Web API,还需要在WebApiConfig.cs里配置JSON序列化的驼峰匹配,否则可能因为命名大小写问题解析失败:

public static void Register(HttpConfiguration config)
{
    // 配置JSON序列化支持驼峰命名匹配
    config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = 
        new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
}

按照这几点排查下来,应该就能解决列表为空的问题啦!

备注:内容来源于stack exchange,提问作者Bogdan Alexandru Rus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 07:48:34