c# - .NET Core HttpClient 上传字节数组给出不受支持的媒体类型错误

标签 c# asp.net-core

我正在尝试为我的 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()));
结果:
enter image description here

关于c# - .NET Core HttpClient 上传字节数组给出不受支持的媒体类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62416346/

相关文章:

c# - WEB API 2 身份 - 使用现有数据库

.net - 本地开发环境中的 Azure WebJobs UseDevelopmentStorage=true

asp.net-core - Google.Cloud.Diagnostics.AspNetCore3 调试级别不起作用

c# - 我可以从 Visual Studio 2010 中运行 NUnit 测试吗?

c# - 在 View 中的模型中调用模型。 (asp.net MVC)

c# - 使用 asp.net mvc 上传多个文件/文件路径

mysql - 在.net core中使用pomelo.entityframeworkcore.mysql调用存储过程

C# DirectInput SendInput 不影响游戏

razor - Razor页面在运行时无法在ASP.NET Core RC2中看到引用的类库

asp.net - Docker中带有JavaScriptServices的ASP.NET Core项目无法启动节点