Как отправить файл в 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 шт):

Автор решения: Pavel Mayorov

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

→ Ссылка