Как правильно передать массив байт из приложения .NET Core, при помощи web api?
Я пытаюсь получить массив байт с апи сервера, при помощи: WebClient().DownloadData()
На сервере приложение .NET Core, сигнатура метода с которого пытаюсь получить массив: public ByteArrayContent Get(string str)
Пробовал поставить тип возвращаемого значения byte[], но в обоих случаях вебклиент получает какие-то не понятные байты.
Может быть, я просто ставлю не тот тип возвращаемые методом приложения .net core?
Раньше в js не было типа byte, поэтому массив байт кодировался в base64 string и отправлялся в строки. Скорее всего у вас происходит тоже самое. Попробуйте декодировать пришедшие байты с помощью Convert.FromBase64
попробуйте при помощи
new HttpClient().GetAsync() - тогда в ответе будут именно те байты, которые нужны.
WebClient - легаси
И возвращать из контроллера byte[] или Stream
ByteArrayContent - это для клиента.
Если вам нужно вернуть файл, а не произвольные байты, то тогда делайте return File(...);
Предложенный Вами способ не помог ;(
Я использовал HttpClient().GetByteArrayAsync(), чтобы извлечь массив байт из метода
public byte[] Get(string str)
{
return new byte[25];
}
однако, это дало тот же результат, что и использование WebClient: я получил масив из 38 байт, где все байты отличны от 0.
Или я должен был использовать именно HttpClient().GetAsync()?
barsic1234, не принципиально. Видимо, byte[] действительно возвращает строку с байтами в base64.
Чтобы кодировало не в строку, можно ещё попробовать правильный, но не красивый способ -
Василий Банников,
Способ с await Response.Body.WriteAsync(new byte[25]);
работает
public Stream Get(string str)
{
return new MemoryStream(new byte[25]);
}
возвращение Stream также работает, я почему-то сначала подумал, что это будет равнозначно возвращению массива байт, и не попробовал с ним (
Огромнейшее Вам спасибо! Три дня мучался с этим вопросом, под конец голова уже закипела.