我正在尝试为我的 Web Api 控制器(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);
Run Code Online (Sandbox Code Playgroud)
控制器
[HttpPost("content")]
public IActionResult Upload([FromBody]byte[] documentData, [FromQuery] string someField)
{
...
return Ok();
}
Run Code Online (Sandbox Code Playgroud)
但这给了我错误415 Unsupported media type。为什么 ?我需要在 url 中添加一些额外的数据,但我认为这不是问题所在。
Ren*_*ena 10
虽然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);
Run Code Online (Sandbox Code Playgroud)
在 Web Api 项目中接收操作:
[HttpPost("content")]
public IActionResult Upload([FromBody]byte[] documentData, [FromQuery] string someField)
{
return Ok();
}
Run Code Online (Sandbox Code Playgroud)
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());
}
}
Run Code Online (Sandbox Code Playgroud)
Web Api 项目中的 Startup.cs:
services.AddControllers(options=>
options.InputFormatters.Add(new ByteArrayInputFormatter()));
Run Code Online (Sandbox Code Playgroud)
结果:
| 归档时间: |
|
| 查看次数: |
1478 次 |
| 最近记录: |