#c# #asp.net-core #asp.net-core-webapi
#c# #asp.net-core #asp.net-core-webapi
Вопрос:
Я знаю, что при отправке составных запросов вместе с объектом JSON уже было много потоков, но, к сожалению, ни один из них фактически не решил проблему для меня.
Я создал контроллер, принимающий объект, содержащий IFormFile вместе с некоторым объектом метаданных:
public class DocumentMultipartRequest
{
[FromForm]
public DocumentMetadata Metadata { get; set; }
[FromForm]
public IFormFile File { get; set; }
}
Контроллер выглядит так:
[Consumes("multipart/form-data")]
public async Task<Guid> AddDocument(DocumentMultipartRequest request)
{
}
По-видимому, Swagger правильно понимает мое намерение, потому что у меня есть строка ($binary), позволяющая мне выбрать файл и объект с соответствующими полями внутри для заполнения, к сожалению, когда я все установлю и нажму «Выполнить», я получу ошибку «415 неподдерживаемый тип носителя» в качестве результата.
Как я могу решить эту проблему, сохраняя при этом, что Swagger все еще понимает мои намерения, поэтому API хорошо документирован?
Установка нескольких типов [Потребляет] не помогла, пометка всего DocumentMultipartRequest как [FromForm] разделит DocumentMetadata на разные поля, например DocumentMetadata.Property1, DocumentMetadata.Свойство2. Последний на самом деле будет работать нормально и будет должным образом привязан к объекту DocumentMetadata на стороне сервера, но, если возможно, я бы предпочел принять обычный JSON, потому что объект метаданных может усложниться позже.
Комментарии:
1. Какой веб-сервер вы используете? Kestrel (для разработки), IIS, Apache? Я знаю, что для Apache вам нужно установить
FILE_UPLOADS=ON
. Однако это всего лишь ячейка…2. Kestrel, скорее всего, будет использоваться в производственной среде позже.