Swagger: как через него скачать файл?
я польуюсь Swagger, когда делаю NET Core проекты с REST api интерфейсом. (обычно NET Core 6.0 или 7.0)
И это невероятно удобно: если я описываю аргументы и результаты в контроллере, то я вижу на экране результаты в виде json и могу подставлять json-изированные аргументы в вызов любой (вынесенной в интерфейс контроллера) функции.
Но в одном случае я стал генерировать на сервере *.CSV - файл, который можно открыть в Excel и проверить цифры "глазками", что еще более удобно, чем смотреть в джейсон. Но от беда: я хотел бы, чтобы этот файл, сгенерированный на сервере, можно было скачать прямо через Swagger - интерфейс.
Не подскажете ли Вы мне, в какую сторону копать? Спасибо!
Ответы (1 шт):
я нашел такое простое решение (нашел здесь) и сделал простой пример (см. папку mfiles) проекта типа webapi.
mkdir mfiles
cd mfiles
dotnet create webapi
Суть: есть REST интерфейс, который по id возвращает в методе GetPerson() экземпляр класса Person, а в методе GetPhoto() файл типа *.jpg
Собственно, метод, который обеспечивает возврат файла:
[HttpGet("Get person photo by id")]
public async Task<IActionResult> GetPhoto(int id)
{
if (id == 12)
return File(await System.IO.File.ReadAllBytesAsync(Path.Combine("files", "girl.jpg")), "image/jpeg", "girl.jpg");
return BadRequest();
}
А вот как выглядит сваггер-интерфейс при открытии проекта:
Чего у меня НЕ ПОЛУЧИЛОСЬ: сделать так, чтобы в одном и том же методе можно было вернуть и экземпляр объекта, и файл. Как сделать это - я пока не знаю.
И вот еще что интересно: можно ли в одном и том же методе вернуть несколько файлов?
