如何提升 Kestrel 上传文件的大小限制?
咨詢區
ToddBFisher
我的程序是 ASP.NET Core WebApp,我希望上傳一個大的文件,我知道在 IIS 中可以輕松的在 web.config 中做如下配置即可,參考如下代碼:
<system.webServer><security><requestFiltering><!--<requestLimits?maxAllowedContentLength="1073741824"/>--><requestLimits?maxAllowedContentLength="2147483648"/></requestFiltering></security> </system.webServer>請問當用 Kestrel 承載的 ASP.NET Core 時如何處理?我現在得到的錯誤都是 Request body too large
回答區
ToddBFisher
我在 github 的 issue 上找到了答案 https://github.com/aspnet/Announcements/issues/267 ?,在 ASP.NET Core 2.0 中默認 body 的最大尺寸是 28.6MB,更重要的還說出了如何繞過它,總的來說,在單個 Controller 或者 Action 上標注 [DisableRequestSizeLimit] 特性可以讓當前的 body 無限制,或者干脆設一個特別大的值 [RequestSizeLimit(100_000_000)] 。
如果你要設置全局作用域,需要在 BuildWebHost() 方法中動手腳,在 Program.cs 中添加 .UseKestrel 選項,參考如下代碼:
public?class?Program{public?static?void?Main(string[]?args){CreateWebHostBuilder(args).Build().Run();}public?static?IWebHostBuilder?CreateWebHostBuilder(string[]?args){return?WebHost.CreateDefaultBuilder(args).UseStartup<Startup>().UseKestrel(options?=>{options.Limits.MaxRequestBodySize?=?null;});}}Akbar Asghari
樓上的回答是 ASP.NET Core 2.0 版本,如果你想用 NET Core 3.x web API 系列的解決方案,代碼應該像下面這樣。
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;});}); }點評區
其實你會發現在 .NET Core 系列版本中,每個版本之間寫法變動還是挺大的,比如說:2.2 和 3.0 不一樣,3.0 和 6.0 又不一樣了,下面是 6.0 的寫法。
var?builder?=?WebApplication.CreateBuilder(args);builder.WebHost.UseKestrel(so?=> {so.Limits.MaxRequestBodySize?=?null; });//?Add?services?to?the?container. builder.Services.AddControllersWithViews();var?app?=?builder.Build();app.UseRouting();app.MapControllerRoute(name:?"default",pattern:?"{controller=Home}/{action=Index}/{id?}");app.Run();總的來說,挺糾結,學無止境 😄
總結
以上是生活随笔為你收集整理的如何提升 Kestrel 上传文件的大小限制?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Blazor系列终结!
- 下一篇: 轻松实现深度Clone | Source