413 слишком большой объект запроса - Web API - PullRequest
0 голосов
/ 17 января 2020

Я столкнулся с проблемой 413 при попытке отправить данные из моего веб-приложения (.netfx 4.6.1) в мой веб-интерфейс API (. net core 3.1). В приведенном ниже коде я посылаю список, содержащий байтовые данные изображений, а также дополнительные данные, необходимые для создания файла. Ожидаемый результат - вернуть байтовый массив, содержащий новый файл. К сожалению, при отправке запроса я получаю сообщение об ошибке: Код состояния ответа не указывает на успешность: 413 (слишком большой объект запроса).

Ошибка, по-видимому, возникает только тогда, когда файл имеет большой размер, что имеет смысл , Исследование, которое я провел, похоже, указывает на настройки в IIS, основными из которых являются maxAllowedContentLength, maxRequestLength и uploadReadAheadSize. Я пытался увеличить эти значения до более подходящих для этого процесса, но, похоже, ничего не работает. Я настроил их как для веб-приложения, так и для веб-API, так как не был уверен, какое из них вызывает проблему.

Где проблема l ie? В приложении API или оба? Есть ли дополнительные настройки, которые мне не хватает, чтобы разрешить увеличение размера? Есть ли проблема с тем, как я отправляю запрос? Любая помощь приветствуется.

    public static async Task<byte[]> CreatePdfFromImageFilesAsync(List<ImageFile> imageFiles)
    {
        var list = new List<dynamic>();
        foreach (var item in imageFiles)
        {
            list.Add(new
            {
                Data = Convert.ToBase64String(item.Bytes),
                PageOrder = item.PageOrder,
                Rotation = item.Rotation,
                Type = "PDF"
            });
        }

        var response = _client.PostAsJsonAsync($"{FileCreatorAPI}/api/files/CreateFileFromMultiple", list).Result;
        var result = response.EnsureSuccessStatusCode();
        var bytes = await result.Content.ReadAsAsync<byte[]>();
        return bytes;
    }

Ответы [ 2 ]

1 голос
/ 17 января 2020

Можете ли вы проверить этот атрибут https://github.com/aspnet/Announcements/issues/267? Используя

[RequestSizeLimit(100_000_000)] 

в точке входа вашего контроллера или более глобально, настройте его следующим образом:

.UseKestrel(options =>
{
    options.Limits.MaxRequestBodySize = null;

РЕДАКТИРОВАТЬ: статья из MS: https://dotnet.microsoft.com/download/dotnet-core

0 голосов
/ 01 февраля 2020

Я думаю, что проблема на сервере. Сервер завершает запрос, потому что он превышает настроенный максимально допустимый размер запроса.

Какой сервер вы используете? Для Nginx пользователей директива, определяющая допустимый размер HTTP-запроса, равна client_max_body_size, максимально допустимый размер запроса по умолчанию составляет 1 МБ. Предел в Apache устанавливается с помощью директивы LimitRequestBody и по умолчанию равен 0 (что означает неограниченный) 2147483647 (2 ГБ).

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

...