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

.NET Core Api Controller通过HttpGet接收Axios参数报Unsupported media type错误

问题原因与解决方案

核心问题

Unsupported media type 错误的本质是:HttpGet 请求默认不支持从请求体绑定参数,而你的客户端代码可能把对象当作请求体发送,同时服务端未明确指定复杂对象的参数绑定来源。


客户端代码修正(以 Axios 为例)

如果你的 api 是 Axios 实例,直接将 lazyParams 作为第二个参数会被当作请求体发送(仅 POST/PUT 等方法适用)。GET 请求需要将参数放在 params 属性中,Axios 会自动把对象拼接成 URL 查询字符串:

const getGmcList = async(lazyParams:any)=>{
    let res = await api.get(END_POINT+"GetGmcList", { params: lazyParams });
    let data = res.data?.Value;
    return data;
};

服务端代码修正

对于复杂对象参数,需要显式添加 [FromQuery] 特性,告诉 ASP.NET Core 从 URL 查询字符串中绑定参数:

[Route("api/[controller]/[action]")]
[ApiController]
public class GmcController : ControllerBase
{
    GmcManager gmcManager;
    public GmcController(GmcManager gmcManager)
    {
        this.gmcManager=gmcManager;
    }
    [HttpGet]
    public async Task<BLLResultList<GMC_DATA>> GetGmcList([FromQuery] GmcParams gmcParams)
    {
        // 注意:原代码未传递 gmcParams 到业务方法,需补上参数确保逻辑生效
        return await gmcManager.GetGmcList(gmcParams);
    }  
}

不推荐的特殊场景(仅作参考)

如果因业务需求必须通过 HttpGet 传递请求体(不符合 REST 规范,不建议使用),可在 Program.cs/Startup.cs 中启用配置:

services.Configure<MvcOptions>(options =>
{
    options.AllowEmptyInputInBodyModelBinding = true;
});

然后给参数添加 [FromBody] 特性,但这种方式可能存在客户端、代理服务器兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 14:47:11