微軟官網文檔上對.NET Core3.1解決數據大小限制有詳細的介紹。下面是根據自己的情況進行的總結,我們可以把.Core項目部署在IIS上,也可以利用Kestrel進行部署。這兩種方式處理數據大小限制的方式不一樣,具體如下:
一、部署在IIS上的應用配置接收數據的大小限制
1、通過web.config配置
IIS默認請求限制 (maxAllowedContentLength
) 為30000000字節,即約 28.6 MB。 可以添加web.config來自定義配置。首先添加一個web.config配置文件,里面添加的內容如下:
<system.webServer> <security> <requestFiltering> <requestLimits maxAllowedContentLength="52428800" /> </requestFiltering> </security> </system.webServer>
2、使用MaxRequestBodySize配置
通過在StartUp.cs中的設置來增加 HTTP 請求的最大請求正文大小,在下面的示例中,將限制設置為 50 MB (52428800 字節) :
services.Configure<IISServerOptions>(options => { options.MaxRequestBodySize = 52428800; });
二、 利用Kestrel部署的應用配置接收數據的大小限制
對於 Kestrel 托管的應用,默認的最大請求正文大小為 30,000,000 個字節,約為 28.6 MB。下面是處理數據大小限制的方式:
注意:下面介紹的方式是基於Kestrel服務器上的配置,需要以.net core 的運行程序進行啟動時才生效,以iis express 啟動仍不生效。另外應用發布后使用nginx或者iis做反向代理服務器,還需要對反向代理服務器進行配置。
1、 使用 MaxRequestBodySize屬性自定義限制
MaxRequestBodySize獲取或設置任何請求正文的最大允許大小(以字節為單位)。設置為null時,最大請求正文大小是無限的。
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.ConfigureKestrel((context, options) => { options.Limits.MaxRequestBodySize = 52428800; // 限制50M,options.Limits.MaxRequestBodySize=null表示不限制
}
) .UseStartup<Startup>();
});
2、使用MultipartBodyLengthLimit 屬性自定義限制
MultipartBodyLengthLimit 設置每個正文的長度限制。 超出此限制時,會引發 InvalidDataException。 默認值為 134,217,728 (128 MB)。可以在 Startup.ConfigureServices
中設置限制
public void ConfigureServices(IServiceCollection services) { services.Configure<FormOptions>(options => { // Set the limit to 2G options.MultipartBodyLengthLimit = int.MaxValue; }); }
3、使用[DisableRequestSizeLimit]或者[RequestSizeLimit]特性在action上做限制
DisableRequestSizeLimit對大小不做限制,使用如下:
[HttpPost] [DisableRequestSizeLimit] public void UploadFont() { }
RequestSizeLimit是對大小做自定義設置,使用如下
[HttpPost] [RequestSizeLimit(52428800)]
public void UploadFont()
{
}
總結,如果使用其中的一種方式不行,就全加上,我就是全加上后才正常的