微软官网文档上对.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、使用Multipa rtBodyLengthLimit 属性自定义限制
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()
{
}