微软官网文档上对.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()
{
}
总结,如果使用其中的一种方式不行,就全加上,我就是全加上后才正常的