Как поддерживать несколько типов MIME Consumes в методе контроллера ASP.NET Core - PullRequest
0 голосов
/ 22 ноября 2018

Я загружаю файл в виде потока с обходным решением, связывающим модель Stream с этой проблемой , и я хочу поддерживать потребления для нескольких типов MIME.Я предполагал, что это будет работать, но это не так:

public class FileController : BaseController
{
    [HttpPost("customer/{customerId}/file", Name = "UploadFile")]
    [SwaggerResponse(StatusCodes.Status201Created, typeof(UploadFileResponse))]
    [Consumes("application/octet-stream", new string[] { "application/pdf", "image/jpg", "image/jpeg", "image/png", "image/tiff", "image/tif"})]
    //[Consumes("application/octet-stream", "application/pdf", "image/jpg", "image/jpeg", "image/png", "image/tiff", "image/tif")] // doesn't work either
    public async Task<IActionResult> UploadFile([FromBody] Stream file, [FromRoute] string customerId, [FromQuery] FileQueryParameters queryParameters)
    {
        // file processing here
    }
}

Он поддерживает только "application / octet-stream".Любой из других, таких как «image / jpeg», терпит неудачу с 415 неподдерживаемым типом носителя.

Я не могу добавить несколько ConsumeAttributes.Документация для ConsumeAttribute.ContentTypes гласит:

Получает или задает поддерживаемые типы содержимого запроса.Используется для выбора действия, когда в противном случае было бы несколько совпадений.

Я понятия не имею, что пытается изложить эта документация, но я предположил, что это был способ поддержки дополнительных типов MIME!Есть ли способ обойти это для поддержки нескольких типов MIME?

Обновление Подпись метода здесь фиксирована и не может быть изменена.ConsumesAttribute используется для создания файла JSON Swagger, который клиенты используют для создания своих собственных многоплатформенных клиентов для этого API.

1 Ответ

0 голосов
/ 22 ноября 2018

Ваш атрибут расходуется правильно.Я протестировал его с ядром dotnet 2.1, и он работает, как и ожидалось:

    [HttpPost("test")]
    [Consumes("text/plain", new[] { "text/html" })]
    public void Test()
    {

    }

Отправка запроса на публикацию с типом контента "text / plain" или "text / html" работает, в то время как другие типы контента запрещены с 415неподдерживаемый тип мультимедиа.

НО: он перестает работать, если я добавляю потоковый файл [FromBody].

 // Does NOT work:
 [Consumes("text/plain", new[] { "text/html" })]
 public void Test([FromBody] Stream file)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...