为了账号安全,请及时绑定邮箱和手机立即绑定

在 Web api 中使用数组作为参数时出现不支持的媒体类型错误?

在 Web api 中使用数组作为参数时出现不支持的媒体类型错误?

C#
30秒到达战场 2023-06-25 13:48:38
这是控制器内的操作[HttpGet][Route("show_many")][ArrayInput("ids", Separator = ',')]public async Task<HttpResponseMessage> GetByIds(int[] ids){}执行似乎未到达 ArrayInput 或 GetByIds 方法。我相信 int 数组作为参数导致了这个问题。当我执行基本的邮递员请求时,一切正常。我通过 HttpClient 从 SDK 调用此端点。我还尝试在客户端标头中设置内容类型,例如client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));但这也没有帮助。Uri 看起来像http://example.com/show_many?ids=1,2,3这里有什么问题?更新我注意到这个错误发生在 Microsofot.AspNet.WebApi 5.2.7 中,但没有发生在 5.2.3 中。此外,我注意到 client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); 仅创建 Accept 标头,而不创建 Content-Type。Content-type 应该是响应标头,但不幸的是,仅将 content-type 添加到请求标头实际上绕过了此问题(在邮递员中)。
查看完整描述

3 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

我正在使用 .Net 3.1,并且遇到了同样的问题。


解决办法是这样的


[HttpGet("foo")]

public IActionResult GetFoos([FromQuery] FooType[] fooTypes)

{

     return Ok(Foo.One);

}

和queryString是api/myControler/foo?fooType=A&fooType=B;


希望这可以帮助!


查看完整回答
反对 回复 2023-06-25
?
繁星coding

TA贡献1797条经验 获得超4个赞

也许您的 Accept 标头与 415 无关。请确保您正确地形成了 url。

您也可以将 [FromUri] 指定为参数,并像 一样构建您的 uri api?ids[]=1&ids[]=2

查看完整回答
反对 回复 2023-06-25
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

问题是 [ArrayInput("ids", Separator = ',')] 及其与 WebApi 5.2.7 不兼容。



查看完整回答
反对 回复 2023-06-25
  • 3 回答
  • 0 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信