.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请求体传递参数,需要修改配置并调整参数绑定方式:
- 在
Program.cs中添加配置,允许ASP.NET Core从请求体读取GET参数:builder.Services.Configure<ApiBehaviorOptions>(options => { options.SuppressInferBindingSourcesForParameters = true; }); - 修改控制器方法的参数,添加
[FromBody]特性,同时raw的JSON内容要包裹为对象(不能直接写1):[HttpGet] [AllowAnonymous] [Route("Test")] public IActionResult Test([FromBody] int parameter) { return Ok($"response: {parameter}"); }- Postman的raw格式需选择JSON,内容填写:
{"parameter":1}
- Postman的raw格式需选择JSON,内容填写:
内容的提问来源于stack exchange,提问作者Andrei
相关产品推荐
相关产品推荐

