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

.NET 6.0 WebAPI GET请求:form-data正常解析raw数据获默认值问题排查

问题原因与解决方案

核心原因

HTTP规范中,GET请求的设计意图是通过URL查询字符串传递参数,而非请求体。ASP.NET Core默认遵循这一规范,不会从GET请求的请求体中解析绑定简单类型参数(比如int parameter)。

你遇到的差异根源:

  • 用form-data发送GET请求时,Postman会自动把参数转换为URL查询字符串(比如/SiteInfo/Test?parameter=1),WebAPI能通过查询字符串正确绑定参数。
  • 用raw格式发送GET请求时,参数被放在了请求体里,ASP.NET Core默认不会读取这部分内容来绑定int parameter,因此参数使用默认值0。

解决方案

方案1:遵循HTTP规范(推荐)

无论用哪种请求格式,将GET参数放在URL查询字符串中:

  • 示例URL:http://your-domain/SiteInfo/Test?parameter=1
  • 此时不管是form-data还是raw格式,WebAPI都能正确获取参数值1。

方案2:强制从GET请求体绑定参数(不推荐)

如果必须从GET请求体传递参数,需要修改配置并调整参数绑定方式:

  1. 在Program.cs中添加配置,允许ASP.NET Core从请求体读取GET参数:
    builder.Services.Configure<ApiBehaviorOptions>(options =>
    {
        options.SuppressInferBindingSourcesForParameters = true;
    });
    
  2. 修改控制器方法的参数,添加[FromBody]特性,同时raw的JSON内容要包裹为对象(不能直接写1):
    [HttpGet]
    [AllowAnonymous]
    [Route("Test")]
    public IActionResult Test([FromBody] int parameter)
    {
        return Ok($"response: {parameter}");
    }
    
    • Postman的raw格式需选择JSON,内容填写:{"parameter":1}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:30:40