我正在尝试为我的 Web Api Controller (ASP.NET Core 3)上传一个简单的字节数组
using var client = new HttpClient() { BaseAddress = new Uri("http://someUrl.com/") };
var body = new ByteArrayContent(new byte[] {1, 2, 3});
var result = await client.PostAsync("api/somecontroller/content?someField=someData", body);
Controller
[HttpPost("content")]
public IActionResult Upload([FromBody]byte[] documentData, [FromQuery] string someField)
{
...
return Ok();
}
但这给了我错误
415 Unsupported media type
.为什么 ?我需要在 url 中添加一些额外的数据,但我认为这不是问题所在。
最佳答案
虽然 byte[]
将是代表 application/octet-stream
的好方法数据,默认情况下在 asp.net 核心 Web API 中不是这种情况。
这是一个简单的解决方法:
通过 HttpClient 发送请求:
using var client = new HttpClient() { BaseAddress = new Uri("http://localhost:62033") };
var body = new ByteArrayContent(new byte[] { 1, 2, 3 });
body.Headers.ContentType = MediaTypeHeaderValue.Parse("application/octet-stream");
var result = await client.PostAsync("api/Values/content?someField=someData", body);
在 Web Api 项目中接收操作:[HttpPost("content")]
public IActionResult Upload([FromBody]byte[] documentData, [FromQuery] string someField)
{
return Ok();
}
Web Api 项目中的自定义 InputFormatter:public class ByteArrayInputFormatter : InputFormatter
{
public ByteArrayInputFormatter()
{
SupportedMediaTypes.Add(Microsoft.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/octet-stream"));
}
protected override bool CanReadType(Type type)
{
return type == typeof(byte[]);
}
public override Task<InputFormatterResult> ReadRequestBodyAsync(InputFormatterContext context)
{
var stream = new MemoryStream();
await context.HttpContext.Request.Body.CopyToAsync(stream);
return InputFormatterResult.SuccessAsync(stream.ToArray());
}
}
Web Api 项目中的 Startup.cs:services.AddControllers(options=>
options.InputFormatters.Add(new ByteArrayInputFormatter()));
结果:关于c# - .NET Core HttpClient 上传字节数组给出不受支持的媒体类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62416346/