如何在.NET Core 3.1 API中通过appsettings.json增大HTTP响应内容长度
.NET Core 3.1 API响应长度上限调整方案
结论
可以调整.NET Core 3.1 API的HTTP响应长度上限,默认的长度限制是框架为了防范恶意大数据攻击设置的安全策略,合法的大体积数据返回场景可以按需调整限制值。
配置步骤
- 第一步:在
appsettings.json中添加Kestrel服务器的限制配置,示例如下:
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "Kestrel": { "Limits": { // 响应缓冲区最大大小,单位为字节,示例值为100MB,无需限制可设为null "MaxResponseBufferSize": 104857600 } } }
- 第二步:在
Program.cs的主机构建逻辑中绑定上面的配置,让配置生效:
using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; namespace YourApiNamespace { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); // 绑定appsettings中的Kestrel响应长度配置 webBuilder.UseKestrel((hostContext, kestrelOptions) => { kestrelOptions.Limits.MaxResponseBufferSize = hostContext.Configuration .GetValue<long?>("Kestrel:Limits:MaxResponseBufferSize"); }); }); } }
特殊场景补充
如果你的API部署在IIS/IIS Express上,还需要调整IIS自身的响应限制,在项目根目录的web.config中添加如下配置:
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <security> <requestFiltering> <!-- maxAllowedContentLength单位为字节,示例值为100MB --> <requestLimits maxAllowedContentLength="104857600" /> </requestFiltering> </security> </system.webServer> </configuration>
注意:不建议将限制值设为无上限,避免恶意大流量请求耗尽服务器资源,建议结合业务实际的最大响应体积设置合理阈值。
内容的提问来源于stack exchange,提问作者Sher Singh
相关产品推荐
相关产品推荐

