Отправка байтового массива на сервер Web API с использованием HttpClient

Я хочу опубликовать эти данные на сервере Web API:

public sealed class SomePostRequest
{
    public int Id { get; set; }
    public byte[] Content { get; set; }
}

Используя этот код для сервера:

[Route("Incoming")]
[ValidateModel]
public async Task<IHttpActionResult> PostIncomingData(SomePostRequest requestData)
{
    // POST logic here
}

а это - для клиента:

var client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:25001/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
    new MediaTypeWithQualityHeaderValue("application/json"));

var content = new FormUrlEncodedContent(new Dictionary<string, string>
{
    { "id", "1" },
    { "content", "123" }
});

var result = await client.PostAsync("api/SomeData/Incoming", content);
result.EnsureSuccessStatusCode();

все работает нормально (по крайней мере, отладчик останавливается на точке останова вPostIncomingData).

Так как естьbyte массив, я не хочу сериализовать его как JSON, и хочу опубликовать его как двоичные данные, чтобы уменьшить сетевой трафик (что-то вродеapplication/octet-stream).

Как этого можно достичь?

Я пытался играть сMultipartFormDataContentно, похоже, я просто не могу понять, какMultipartFormDataContent будет соответствовать сигнатуре метода контроллера.

Например, заменив содержание на это:

var content = new MultipartFormDataContent();
content.Add(new FormUrlEncodedContent(new Dictionary<string, string> { { "id", "1" } }));

var binaryContent = new ByteArrayContent(new byte[] { 1, 2, 3 });
binaryContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
content.Add(binaryContent, "content");

var result = await client.PostAsync("api/SomeData/Incoming", content);
result.EnsureSuccessStatusCode();

приводит к ошибке 415 («Неподдерживаемый тип носителя»).

Ответы на вопрос(4)

Ваш ответ на вопрос