Swagger: как через него скачать файл?

Рейтинг: 0Ответов: 1Опубликовано: 17.03.2023

я польуюсь Swagger, когда делаю NET Core проекты с REST api интерфейсом. (обычно NET Core 6.0 или 7.0)

И это невероятно удобно: если я описываю аргументы и результаты в контроллере, то я вижу на экране результаты в виде json и могу подставлять json-изированные аргументы в вызов любой (вынесенной в интерфейс контроллера) функции.

Но в одном случае я стал генерировать на сервере *.CSV - файл, который можно открыть в Excel и проверить цифры "глазками", что еще более удобно, чем смотреть в джейсон. Но от беда: я хотел бы, чтобы этот файл, сгенерированный на сервере, можно было скачать прямо через Swagger - интерфейс.

Не подскажете ли Вы мне, в какую сторону копать? Спасибо!

Ответы

▲ 0Принят

я нашел такое простое решение (нашел здесь) и сделал простой пример (см. папку 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();
    }

А вот как выглядит сваггер-интерфейс при открытии проекта:

Swagger for download file

Чего у меня НЕ ПОЛУЧИЛОСЬ: сделать так, чтобы в одном и том же методе можно было вернуть и экземпляр объекта, и файл. Как сделать это - я пока не знаю.

И вот еще что интересно: можно ли в одном и том же методе вернуть несколько файлов?