.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()
{
}

总结,如果使用其中的一种方式不行,就全加上,我就是全加上后才正常的

原文地址:https://www.cnblogs.com/qtiger/p/13886356.html