Увеличить ограничение длины запроса на загрузку в Kestrel

Я запускаю веб-приложение ASP.NET Core и хочу загружать большие файлы.

Я знаю, что при запуске IIS ограничения можно изменить через web.config:

<httpRuntime maxRequestLength="1048576" /> 
...
<requestLimits maxAllowedContentLength="1073741824" /> 

Как сделать то же самое при запуске нового веб-сервера Kestrel ASP.NET Core?

Я получаю исключение «Тело запроса слишком велико»


person ToddBFisher    schedule 13.10.2017    source источник


Ответы (2)


Я нашел это полезное объявление, подтверждающее, что начиная с ASP существует ограничение на размер тела 28,6 МБ. NET Core 2.0, но, что более важно, показывает, как это обойти!

Обобщить:

Для одного контроллера или действия используйте _1 _ без ограничения, или атрибут _2 _, чтобы указать настраиваемый лимит.

Чтобы изменить его глобально, внутри метода BuildWebHost() внутри файла Program.cs добавьте параметр .UseKestrel ниже:

WebHost.CreateDefaultBuilder(args)
  .UseStartup<Startup>()
  .UseKestrel(options =>
  {
    options.Limits.MaxRequestBodySize = null;
  }

Для большей ясности вы также можете обратиться к Документация по параметрам Kestrel.

person ToddBFisher    schedule 13.10.2017
comment
Извините, мне кажется странным отвечать на свой вопрос, но я надеюсь, что это принесет пользу другим. - person ToddBFisher; 14.10.2017
comment
Ответить на свой вопрос - это совершенно нормально, и вы можете сделать это в любое время, если у вас есть вопрос, который, по вашему мнению, является полезным. ! Так что спасибо за исследование! :) - person poke; 14.10.2017
comment
Привет! Можете ли вы сказать, какой максимальный размер заголовка запроса на Kestrel? - person Zeeshan Adil; 20.03.2019
comment
Мне неизвестны какие-либо абсолютные ограничения, кроме ограничения максимального значения соответствующего типа данных (Int32.MaxValue), указанного в настраиваемом свойстве KestrelServerLimits.MaxRequestHeadersTotalSize. Вы можете попробовать задать новый вопрос по SO. - person ToddBFisher; 20.03.2019

другой ответ предназначен для ASP.NET Core 2.0, но я хотел бы предоставить решение для веб-API .NET Core 3.x. .

Ваш код в program.cs должен быть таким, чтобы он работал:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
                webBuilder.UseKestrel(options =>
                {
                    options.Limits.MaxRequestBodySize = null;
                });
            });
}
person Akbar Asghari    schedule 01.08.2020