gpt4 book ai didi

asp.net - POST 到 web api 时不支持的媒体类型

转载 作者:行者123 更新时间:2023-12-01 04:48:41 24 4
gpt4 key购买 nike

这是客户 :

using (var client = new HttpClient())
{

client.BaseAddress = new Uri("http://localhost/MP.Business.Implementation.FaceAPI/");
client.DefaultRequestHeaders
.Accept
.Add(new MediaTypeWithQualityHeaderValue("application/octet-stream"));
using (var request = new HttpRequestMessage(HttpMethod.Post, client.BaseAddress + "api/Recognition/Recognize"))
{
request.Content = new ByteArrayContent(pic);
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");

await client.PostAsync(request.RequestUri, request.Content);

}
}

服务器 :
[System.Web.Http.HttpPost]
public string Recognize(byte[] img)
{
//do someth with the byte []

}

我收到错误:

415 Unsupported Media Type



一直 - 此资源不支持请求实体的媒体类型“应用程序/八位字节流”。我该怎么办?我在这里找到了一些已回答的主题,但没有帮助。

最佳答案

虽然 byte[]将是代表 application/octet-stream 的好方法数据,Web API 中的默认情况并非如此。

我的解决方法是在 ASP.NET Core 1.1 中 - 其他变体中的细节可能有所不同。

在您的 Controller 方法中,删除 img范围。相反,请参阅 Request.Body ,这是一个 Stream .例如保存到文件:

using (var stream = new FileStream(someLocalPath, FileMode.Create))
{
Request.Body.CopyTo(stream);
}

从 GET Controller 方法返回二进制数据的情况类似。如果您使返回类型 byte[]然后用base64格式化!这使得它明显更大。现代浏览器完全有能力处理原始二进制数据,因此这不再是明智的默认设置。

幸好有 Response.Body https://github.com/danielearwicker/ByteArrayFormatters :
Response.ContentType = "application/octet-stream";
Response.Body.Write(myArray, 0, myArray.Length);

设置 Controller 方法的返回类型 void .

更新

我创建了一个 nuget 包,可以直接使用 byte[]在 Controller 方法中。见: https://github.com/danielearwicker/ByteArrayFormatters

关于asp.net - POST 到 web api 时不支持的媒体类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44090784/

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