gpt4 book ai didi

c# - WebAPI 为 HttpGet 抛出 415 错误

转载 作者:太空狗 更新时间:2023-10-30 00:24:00 30 4
gpt4 key购买 nike

我现在很迷茫。

我的 Web API 2 Controller 中有一个 [HttpGet] 方法:

[HttpGet]
public LanguageResponse GetLanguages(LanguageRequest request)
{
...
}

我的网址是这样的http://localhost:1234/api/MyController/GetLanguages?Id=1

当尝试调用它时(例如,通过 Postman),我收到 HTTP 错误 415:

{"message":"The request contains an entity body but no Content-Type header. The inferred media type 'application/octet-stream' is not supported for this resource.","exceptionMessage":"No MediaTypeFormatter is available to read an object of type 'LanguagesRequest' from content with media type 'application/octet-stream'.","exceptionType":"System.Net.Http.UnsupportedMediaTypeException","stackTrace":"   at System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n   at System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage request, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)"}

这有点奇怪,因为我使用的是 GET

如果我添加Content-Type:application/json,异常不会被抛出,但是方法的request参数设置为null.

在我的客户端代码中,情况更糟。我无法设置 Content-Type header ,因为我的 HttpRequestMessage 中没有 Content 并且如果我设置了内容,它会提示我用错了动词。

最佳答案

Why do we have to specify FromBody and FromUri in ASP.NET Web-API? 中所述,对于要从 Uri 解析的复杂模型,您必须在希望从请求 Uri 解析的参数上使用 [FromUri] 属性:

[HttpGet]
public LanguageResponse GetLanguages([FromUri] LanguageRequest request)
{
...
}

否则,模型绑定(bind)器会提示缺少 Content-Type header ,因为它需要知道如何解析请求正文,无论如何在 GET 请求中它都丢失或为空。

要在具有正文(POST、PUT、...)的请求上为您的客户端设置内容类型,请参阅 How do you set the Content-Type header for an HttpClient request? .

关于c# - WebAPI 为 HttpGet 抛出 415 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31061443/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com