.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
相关产品推荐
相关产品推荐

