Можно ли указать, что метод Web-Api ожидает файл в Swashbuckle / Swagger, сгенерированном page / json - PullRequest
0 голосов
/ 12 февраля 2019

Я получил Web-Api со следующим упрощенным способом получения файла:

[HttpPut("Test/{id}")]
public IActionResult PutTest(string id)
{
    Stream file = Request.Body;
    //rest of method
    return StatusCode(201);
}

Он работает нормально, хотя на создаваемой странице SwaggerUI нет упоминания о методе, ожидающемфайл в теле.Есть ли способ указать, что метод ожидает файл на сгенерированной SwaggerUI странице?

Я могу смоделировать ввод, используя следующий фрагмент кода:

var content = new StreamContent(new FileStream("C:\temp\test.txt", FileMode.Open));

using (var client = new HttpClient())
using (var response = client.PutAsync(url, content))
{
    var result = response.Result;
    //more code   
}

1 Ответ

0 голосов
/ 12 февраля 2019

Загрузка файла не задокументирована, потому что это не параметр в методе действия.Swagger не может знать, что вы делаете внутри самого действия.В любом случае, попытка обработать загрузку файла - плохая практика.Вы можете использовать IFormFile, но это работает, только если ваше тело запроса закодировано как multipart/form-data.Если вы имеете дело с JSON или вообще чем-либо, что квалифицируется как FromBody, то вам необходимо привязать к byte[]:

[HttpPut("Test/{id}")]
public IActionResult PutTest(string id, byte[] file)
{
    //rest of method
    return StatusCode(201);
}

Теперь, автоматическое FromBody, примененное [ApiController]Атрибут работает только с типами классов, поэтому я не уверен, будет ли он применяться к byte[].Если нет, просто сделайте:

public IActionResult PutTest(string id, [FromBody]byte[] file)
...