Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException: тело запроса слишком велико

Я пытаюсь загрузить фильм размером 100 МБ в свое приложение ASP.NET Core.

Я установил этот атрибут для своего действия:

[RequestSizeLimit(1_000_000_000)]

И я также изменил свой файл Web.config, включив в него:

<security>
  <requestFiltering>
    <!-- This will handle requests up to 700MB (CD700) -->
    <requestLimits maxAllowedContentLength = "737280000" />
  </requestFiltering>
</security>

Другими словами, я сказал IIS разрешить файлы размером до 700 МБ, а также сказал ASP.NET Core разрешить файлы размером около 1 ГБ.

Но я все равно получаю эту ошибку. И я не могу найти ответа. Любые идеи?

P.S: Используя эти конфигурации, я мог передать размер по умолчанию 30 МБ. Я могу загружать файлы размером 50 или 70 мегабайт.

Запуск PHP на IIS без использования программы установки веб-платформы
Запуск PHP на IIS без использования программы установки веб-платформы
Установщик веб-платформы, предлагаемый компанией Microsoft, перестанет работать 31 декабря 2022 года. Его закрытие привело к тому, что мы не можем...
Поддержка IIS для PHP
Поддержка IIS для PHP
Эта версия PHP требует наличия C++ Redistributable для VS 2019 (как минимум)
14
1
10 366
4

Ответы 4

Думаю, вам просто нужно: [DisableRequestSizeLimit]

Ниже приведено решение, которое помогло мне загрузить Zip-файлы с дополнительными данными формы в API, работающий под управлением .Net Core 3.

// MultipartBodyLengthLimit  was needed for zip files with form data.
// [DisableRequestSizeLimit] works for the KESTREL server, but not IIS server 
// for IIS: webconfig... <requestLimits maxAllowedContentLength = "102428800" />
[RequestFormLimits(ValueLengthLimit = int.MaxValue, MultipartBodyLengthLimit = int.MaxValue)] 
[DisableRequestSizeLimit] 
[Consumes("multipart/form-data")] // for Zip files with form data
[HttpPost("MyCustomRoute")]
public IActionResult UploadZippedFiles([FromForm] MyCustomFormObject formData)
{ }

Я был близок к тому, чтобы сдаться, но ваше решение работает как шарм! Я тоже нашел эту ссылку github.com/dotnet/aspnetcore/issues/…

Yor Jaggy 25.08.2020 22:18

Это сработало для меня в новом приложении MVC .Net Core 3.1. другие решения, такие как обновление ConfigureServices на Startup.cs и URL-адрес @YorJaggy (который я нашел до этого сайта), не работали.

RoLYroLLs 25.12.2020 20:53

NOTE: This is issue I faced when I migrated my application from asp.net core 2.1 to 3.0

Чтобы исправить это в asp.net core 3.0, я изменил свой файл program.cs, чтобы изменить максимальный размер тела запроса, как показано ниже.

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

    public static IWebHostBuilder CreateWebHostBuilder(string[] args)
    {
       return WebHost.CreateDefaultBuilder(args)
            .ConfigureKestrel((context, options) =>
            {
                options.Limits.MaxRequestBodySize = 737280000;
            })
            .UseStartup<Startup>();
        }
    }
}

Я имею в виду, что я только что добавил часть ConfigureKestrel и добавил атрибут над моим методом действия [RequestSizeLimit(737280000)], как показано ниже.

[HttpPost]
[RequestSizeLimit(737280000)]
[Route("SomeRoute")]
public async Task<ViewResult> MyActionMethodAsync([FromForm]MyViewModel myViewModel)
{
   //Some code
   return View();
}

И мое приложение снова начало вести себя корректно, не закидывая BadHttpRequestException: Request body too large

ссылка: https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads?view=aspnetcore-3.0#kestrel-maximum-request-body-size

Для меня (Asp.net ядро ​​3.1) решением было добавить эти строки в метод ConfigureServicesStartup.cs:

    // 200 MB
    const int maxRequestLimit = 209715200;
    // If using IIS
    services.Configure<IISServerOptions>(options =>
    {
        options.MaxRequestBodySize = maxRequestLimit;
    });
    // If using Kestrel
    services.Configure<KestrelServerOptions>(options =>
    {
        options.Limits.MaxRequestBodySize = maxRequestLimit;
    });
    services.Configure<FormOptions>(x =>
    {
        x.ValueLengthLimit = maxRequestLimit;
        x.MultipartBodyLengthLimit = maxRequestLimit;
        x.MultipartHeadersLengthLimit = maxRequestLimit;
    });

и редактирование web.config:

    <system.webServer>
      <security>
        <requestFiltering>
          <requestLimits maxAllowedContentLength = "209715200" />
        </requestFiltering>
      </security>
    </system.webServer>

Я использовал web.config для настройки этого. (Пока наш api размещен в IIS)

<system.webServer>
    <security>
        <requestFiltering>
            <requestLimits maxAllowedContentLength = "157286400" />
        </requestFiltering>
    </security>
</system.webServer>

Но теперь мы перемещаем наш api в контейнеры Linux и используем Kestral. Затем я настроил, как показано ниже.

.ConfigureWebHostDefaults(webBuilder =>
{
    webBuilder
    .ConfigureKestrel(serverOptions =>
    {
        serverOptions.Limits.MaxRequestBodySize = 157286400;
    })
    .UseStartup<Startup>();
})

157286400 = 150мб;

Другие вопросы по теме