使用HttpClient发送int到FromBody参数时遭遇HTTP 415错误
解决HttpClient调用Put接口时的415 Unsupported Media Type错误
问题原因
出现415错误的核心原因有两点:
StringContent默认使用text/plain作为Content-Type,而ASP.NET Core中带[FromBody]的接口默认只处理application/json格式的请求体;- 原请求体是字符串形式的"5",未按照服务端期望的JSON格式传递数据。
解决方案
方案1:指定StringContent的MediaType为application/json
修改客户端代码,明确设置请求的Content-Type为application/json,并确保请求体是符合JSON格式的数值:
(await _client.PutAsync("foo", new StringContent("5", Encoding.UTF8, "application/json"))).EnsureSuccessStatusCode();
这里的"5"是JSON格式的数值(JSON中数字本身不需要引号),同时通过第三个参数指定了正确的Content-Type,服务端就能正确解析并绑定到int bar参数。
方案2:使用JsonContent自动处理序列化(.NET 5及以上版本支持)
如果使用的是.NET 5或更高版本,推荐使用JsonContent,它会自动将对象序列化为JSON格式,并设置正确的Content-Type:
(await _client.PutAsync("foo", JsonContent.Create(5))).EnsureSuccessStatusCode();
JsonContent.Create(5)会直接生成JSON格式的数值5,并将请求的Content-Type设为application/json,代码更简洁且不易出错。
内容的提问来源于stack exchange,提问作者Bluebaron
相关产品推荐
相关产品推荐

