Ошибка 415 при попытке отправить объект файл как составной запрос

#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, скорее всего, будет использоваться в производственной среде позже.