首先,asp.net core不支持从body中发布多个参数,你需要把这些参数放到一个模型中然后才可以从正文发布它们。
然后,您所做的应该是从查询中发布的。但似乎不支持来自查询的byte[]。
- 如果您使用 JSON.NET,您可以从 query 发布
clientId、dtName 和 append 并从 body 发布 dtValues 如下所示(确保您的控制器使用[ApiController] 声明):
- 如果你使用
System.Text.Json,和Sytem.Text.Json,一个字节数组(byte[])将被序列化为base64字符串。他们表示不会添加对 byte[] 的支持,以将其序列化为 github issue 中的数字数组。
自定义 JsonConverter:
public class ByteArrayConverter : JsonConverter<byte[]>
{
public override byte[] Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
short[] sByteArray = JsonSerializer.Deserialize<short[]>(ref reader);
byte[] value = new byte[sByteArray.Length];
for (int i = 0; i < sByteArray.Length; i++)
{
value[i] = (byte)sByteArray[i];
}
return value;
}
public override void Write(Utf8JsonWriter writer, byte[] value, JsonSerializerOptions options)
{
writer.WriteStartArray();
foreach (var val in value)
{
writer.WriteNumberValue(val);
}
writer.WriteEndArray();
}
}
注册:
services.AddControllers().AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.Add(new ByteArrayConverter());
});
在 Postman 中测试:
顺便说一句,不确定您的方案是什么,如果您发布的字节数组类似于文件(例如: 图像或.doc 或.xlx 文件),您可以使用IFormFile 并在参数前添加[FromForm]。 JSON.NET或System.Text.Json都支持接收IFormFile,这里不需要自定义JsonConverter:
[Route("Upload")]
public IActionResult Upload(int clientId, string dtName, [FromForm]IFormFile dtValues, bool append)
{
return Ok();
}
发布如下数据:
如果您不想单独从 query 和 body 发布它们,您可以将它们放入模型中 strong> 并从正文中发布。
型号:
public class TestModel
{
public int clientId { get; set; }
public string dtName { get; set; }
public byte[] dtValues { get; set; }
public bool append { get; set; }
}
在邮递员中发帖:
注意:如果你使用System.Text.Json,你仍然需要像上面我分享的选项2那样自定义JsonConverter。