Я хочу вернуть поток файлов, используя SwashBuckle
[System.Web.Http.HttpGet]
[System.Web.Http.Route("Files/{uid}/file")]
[SwaggerResponse(HttpStatusCode.OK, Type = typeof(Byte[]))]
public HttpResponseMessage DownloadFile(String uid, String fileName)
{
return Safe.Execute(() =>
{
var api = new FileApi();
var stream = api.GetFile(uid, fileName);
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
result.Content.Headers.ContentDisposition =
new ContentDispositionHeaderValue("attachment")
{
FileName = CalcFileName(fileName)
};
return result;
});
}
И я вижу, что файл возвращается, но ... как-то ... закодирован. Файл длиной 3798 становится 5789 байт после загрузки через пользовательский интерфейс, и содержимое файла очень похоже на ожидаемое, но включены дополнительные байты, как если бы он интерпретировался как строка и стал версией в кодировке UTF-8.
Ничего не меняется, когда я заменяю его как:
[SwaggerResponse(HttpStatusCode.OK, Type = typeof(Stream))]
Сгенерированный Swagger дескриптор выглядит как:
"produces": [
"application/json",
"text/json",
"application/xml",
"text/xml"
],
...
"responses": {
"200": {
"description": "OK",
"schema": {
"format": "byte",
"type": "string"
}
Есть идеи, как реализовать возврат потока файлов из метода контроллера?