.Net Core 3.1 解決數據大小限制


微軟官網文檔上對.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()
{
}

 

總結,如果使用其中的一種方式不行,就全加上,我就是全加上后才正常的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM