Как отправить файл в ASP.NET Core Web-API вместе с моделью?
Буквально все руководства (что MS, что Metanit) описывают, как отправить один файл. Но этот файл нужно отправить вместе с дургими данными, и вот тут я поплыл.
Контроллер
[HttpPost("addwithfile")]
public ProductClass PostWithFile(IFormFile file)
Отрабатывает на ура: в swagger я вижу возможность добавить файл, он добавляется и передается. Меняем контроллер:
public ProductClass PostWithFile(ProductClass pclass, IFormFile file)
из swagger пропадает возможность добавить файл, только поля модели Если вручную пошаманить с postman'ом то получаю ошибку 415, Unsupported Media Type
Как можно за один POST передать в API данные формы и файл?
Ответы (1 шт):
Web API по умолчанию назначает всем составным моделям источник [FromBody]. Это означает, что тело запроса берётся целиком и десериализуется в модель. Но если тело запроса целиком занято моделью - где вы собираетесь передавать файл? Для него просто не остаётся места.
Поэтому, если вы собираетесь передавать модель и файл совместно - вы явно указать Web API, что ваша модель должна передаваться как часть формы (multipart/form-data).
Это достигается через указание атрибута [FromForm]:
public ProductClass PostWithFile([FromForm]ProductClass pclass, IFormFile file)
Подробнее обо всём этом можно прочитать тут: Create web APIs with ASP.NET Core - Binding source parameter inference