Хотя предлагаемое решение работает нормально, есть другой способ вернуть байтовый массив из контроллера с правильно отформатированным потоком ответа:
- В запросе установите заголовок «Accept: application / octet»-stream ".
- На стороне сервера, добавьте форматер типа мультимедиа для поддержки этого типа MIME.
К сожалению, WebApi не содержит никакого форматера для" application / octet-stream ",Здесь есть реализация на GitHub: BinaryMediaTypeFormatter (есть небольшие изменения, чтобы он работал для webapi 2, сигнатуры методов изменены).
Вы можете добавить этот форматер в свою глобальную конфигурацию:
HttpConfiguration config;
// ...
config.Formatters.Add(new BinaryMediaTypeFormatter(false));
Теперь WebApi должен использовать BinaryMediaTypeFormatter
, если в запросе указан правильный заголовок Accept.
Я предпочитаю это решение, потому что контроллер действия, возвращающий байт [], удобнее тестировать.Тем не менее, другое решение дает вам больше контроля, если вы хотите вернуть другой тип контента, чем «application / octet-stream» (например, «image / gif»).