Я пытаюсь загрузить фильм размером 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 мегабайт.
Думаю, вам просто нужно: [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/…
Это сработало для меня в новом приложении MVC .Net Core 3.1. другие решения, такие как обновление ConfigureServices
на Startup.cs
и URL-адрес @YorJaggy (который я нашел до этого сайта), не работали.
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
Для меня (Asp.net ядро 3.1) решением было добавить эти строки в метод ConfigureServices
Startup.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мб;
См. Kestrel MaxRequestBodySize загружает файл сверх лимита