Member 8921416 Ответов: 1

Веб-API для получения массива байтов


Я получаю ошибку HTTP 415 неподдерживаемый тип носителя в HttpResponseMessage.
Как заставить работать коды на стороне сервера?

HTTPClient используется для публикации данных байтового массива следующим образом...

использование(HttpClient c=new HttpClient()
{
c.DefaultRequestHeader.Accept.Add(new MediaTypeWithQualityHeaderValue("application/octet-stream)

byte[] Data=новый байт { 0x00, 0x01, 0x02... };

HttpResponseMessage r=await c.PostAsync("http://abc.com/api/File/Filename", new ByteArrayContent(данные);

if(r.IssuccessStatusCode) возвращает true;
возвращать false;
}

Серверная сторона(MVC/Razor) получает байтовый массив следующим образом

[HttpPost("{Имя Файла}")]
public async Task<int> Post([FromBody] string Filename)
{
MemoryStream ms=new MemoryStream((int)Request.Body.Длина);
жду запроса ... тело.CopyToAsync(МС);

байт[] b=ms.Метод toArray(); МС.рядом();
Файл.WriteAllBytesAsync("Data.bin", b);
возврат b.длина;
}

Что я уже пробовал:

Скомпилирован под управлением Visual Studio 2017 работает на рабочей станции Windows 10 Pro

Member 8921416

Я видел этот пример и не видел полезных фрагментов кода на стороне сервера.
Клиентская сторона работает прямолинейно, используя HttpClient. Серверная сторона, кажется, даже терпит крах по запросу.Body.Длина аксессора

Richard Deeming

Почему ты связываешь их? Filename параметр как для маршрута, так и для тела запроса, а также попытка прочитать тело запроса вручную?

Кроме того, установка заголовка "accept" в запросе сообщает серверу, какие форматы ответов он может отправить. Это не меняет того, какие форматы запросов сервер будет принимать.

1 Ответов

Рейтинг:
2

Bohdan Stupak

Вы можете сделать это так же просто, как это

[HttpPost]
public void Post(byte[] bytes)
{
   //your code
}

Web API довольно хорошо обрабатывает массив байтов в качестве входных параметров


Member 8921416

HttpClient.PostAsyn(string URL, HttpContent c) не позволяет передавать массив байтов по URL-адресу. Как HttpClient собирается вызывать этот API на стороне сервера?

Bohdan Stupak

В отличие от GET-запроса, вы не передаете параметры POST - запроса через URL-адрес. Вы передаете их через тело. Взгляните на этот пример https://stackoverflow.com/questions/16416601/c-sharp-httpclient-4-5-multipart-form-data-upload

Member 8921416

если HttpClient используется просто для публикации ByteArrayContent, серверная сторона должна иметь возможность забрать ByteArrayContent из тела HttpRequest. Я ищу пример кода, который позволяет стороне сервера собирать ByteArrayContent, опубликованный клиентом.

Bohdan Stupak

попробуй вот это https://stackoverflow.com/a/23884972