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

.NET 8.0 API中带[FromBody] dynamic参数的POST方法调用异常问题

.NET 8 中 [FromBody] dynamic 参数前端调用无响应的解决方案

1. 校验请求内容类型与序列化格式

.NET 8 的 System.Text.Json 对请求格式的校验比 .NET 3.1 更严格,需确保前端请求明确指定 Content-Type: application/json,并正确序列化请求体:

  • Axios 示例:
    axios.post('/api/WeatherForecast', { key: 'testValue' }, {
      headers: { 'Content-Type': 'application/json' }
    })
    
  • Fetch 示例:
    fetch('/api/WeatherForecast', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ key: 'testValue' })
    })
    

2. 替换 dynamic 为强类型模型(推荐方案)

.NET 8 中 System.Text.Json 对 dynamic 参数的反序列化逻辑已变更,不再默认转为 ExpandoObject,而是返回 JsonElement,导致参数绑定失败。改用强类型模型可彻底解决兼容性问题:

public class ForecastRequest
{
    public string RequiredField { get; set; }
    // 根据实际需求添加字段
}

[HttpPost]
public IActionResult Post([FromBody] ForecastRequest request)
{
    // 业务逻辑处理
    return Ok(request);
}

3. 配置 JSON 序列化兼容 dynamic 参数

若必须保留 dynamic 写法,可在 Program.cs 中修改 JSON 序列化配置,强制将动态参数反序列化为 ExpandoObject:

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
        options.JsonSerializerOptions.TypeInfoResolver = new DefaultJsonTypeInfoResolver
        {
            Modifiers = {
                typeInfo =>
                {
                    if (typeInfo.Type == typeof(dynamic))
                    {
                        typeInfo.Kind = JsonTypeInfoKind.Object;
                        typeInfo.CreateObject = () => new ExpandoObject();
                    }
                }
            }
        };
    });

4. 排查跨域配置

确认 .NET 8 项目已正确配置跨域策略,避免前端请求被拦截:

builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowFrontend", policy =>
    {
        policy.WithOrigins("http://localhost:3000") // 替换为你的前端地址
              .AllowAnyMethod()
              .AllowAnyHeader();
    });
});

// 在路由配置后启用跨域
app.UseRouting();
app.UseCors("AllowFrontend");
app.UseAuthorization();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:32:46