猿问

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

这是控制器内的操作


[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 添加到请求标头实际上绕过了此问题(在邮递员中)。


30秒到达战场
浏览 137回答 3
3回答

幕布斯7119047

我正在使用 .Net 3.1,并且遇到了同样的问题。解决办法是这样的[HttpGet("foo")]public IActionResult GetFoos([FromQuery] FooType[] fooTypes){&nbsp; &nbsp; &nbsp;return Ok(Foo.One);}和queryString是api/myControler/foo?fooType=A&fooType=B;希望这可以帮助!

繁星coding

也许您的 Accept 标头与 415 无关。请确保您正确地形成了 url。您也可以将 [FromUri] 指定为参数,并像 一样构建您的 uri api?ids[]=1&ids[]=2。

元芳怎么了

问题是 [ArrayInput("ids", Separator = ',')] 及其与 WebApi 5.2.7 不兼容。
随时随地看视频慕课网APP
我要回答