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

ASP.NET 5.0 MVC中Fetch POST请求的body参数始终为null如何解决?

问题原因与解决方案

1. 属性名称不匹配

ASP.NET 5默认使用System.Text.Json做JSON序列化,默认启用驼峰命名转换,如果你的项目手动修改过JSON配置关闭了该规则,前端小驼峰的startDate/endDate/filterIds就无法匹配后端DTO大驼峰的属性名,导致绑定失败。
解决方案二选一:

  • 给DTO属性添加JsonPropertyName注解显式指定对应前端的属性名:
public class StatisticFormDTO
{
    public StatisticFormDTO()
    {
        FilterIds = new List<int>();
    }
    [JsonPropertyName("startDate")]
    public DateTime StartDate { get; set; }
    [JsonPropertyName("endDate")]
    public DateTime EndDate { get; set; }
    [JsonPropertyName("filterIds")]
    public IList<int> FilterIds { get; set; }
}
  • 全局配置JSON序列化启用驼峰转换,在Startup.cs/Program.cs中添加配置:
builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
    });

2. DateTime格式解析失败

如果前端传递的日期字符串不符合后端默认的解析规则(比如非ISO标准格式、带自定义时区标记),会导致整个DTO反序列化失败返回null。
验证方式:先将DTO中的DateTime类型改为string,如果此时参数能正常绑定,即可确定是日期解析问题。
解决方案:

  • 前端统一传递yyyy-MM-dd HH:mm:ss格式的标准日期字符串
  • 全局添加DateTime类型转换器:
builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.Converters.Add(new DateTimeConverter());
    });

3. 类型不匹配/非法值

如果前端传递的filterIds不是标准int数组、包含非int格式的值,或者任意属性值不符合字段类型约束,都会触发反序列化失败。
可以添加宽松解析配置兼容常见类型转换:

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        // 允许从字符串读取数字
        options.JsonSerializerOptions.NumberHandling = JsonNumberHandling.AllowReadingFromString;
    });

4. 缺少ApiController特性

如果你的Controller类没有添加[ApiController]特性,[FromBody]的默认绑定行为会变化,也可能导致绑定失败,检查Controller类定义是否有该注解:

[ApiController]
[Route("[controller]")]
public class DossiersController : ControllerBase
{
    // 你的接口代码
}

调试排查方法

如果以上方案都无效,可以先读取原始请求体确认传参格式是否正确:

[HttpPost]
public async Task<IActionResult> GetStatsBySalesman([FromBody] StatisticFormDTO parameters)
{
    Request.EnableBuffering();
    var rawJson = await new StreamReader(Request.Body).ReadToEndAsync();
    Request.Body.Position = 0;
    // 打印rawJson即可看到前端实际传递的完整JSON内容,排查格式问题
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:15:10