Я хочу вернуть файловый поток с помощью 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"
}
Любая идея, как реализовать возврат файлового потока из метода контроллера?