ASP.NET Core部署IIS:上传大小限制配置必要性及带宽防护咨询
关于ASP.NET Core部署IIS时文件上传限制的疑问
假设网站部署在IIS服务器上,整理了以下上传大小限制配置,现咨询三个问题:
- 是否需要全部配置这些项?
- 若核心需求是防止大文件占用服务器带宽(产生成本),哪一项是必须配置的?
- 这些配置是否会在未接收文件时就直接终止请求?
给出的配置项如下:
web.config(设置101MB限制,因100MB限制无法容纳含请求头的100MB文件)
<system.webServer> <security> <requestFiltering> <requestLimits maxAllowedContentLength="105906176" /> </requestFiltering> </security> </system.webServer>
Kestrel配置(仅作备用,不确定部署在IIS时是否仍会使用Kestrel)
builder.WebHost.ConfigureKestrel(opt => { opt.Limits.MaxRequestBodySize = settings.MaxFileSize; });
Multipart配置
services.Configure<FormOptions>(opt => { opt.MultipartBodyLengthLimit = settings.MaxFileSize; });
API控制器方法
[HttpPost, Route("/test-upload")] public IActionResult TestUpload([FromForm] IFormFile file) { if (file.Length > this.settings.MaxFileSize) { return this.BadRequest("File size exceeded"); } return this.Ok(); }
另外,当前在IIS Express上开发项目,不清楚如何搭建环境测试上述场景。
问题解答
1. 是否需要全部配置?
不需要全部配置,不同配置作用在不同层级,按需选择即可:
web.config里的maxAllowedContentLength是IIS层面的限制,作用在请求到达ASP.NET Core应用之前。- Kestrel的
MaxRequestBodySize是.NET内置Web服务器的限制,部署在IIS时,请求先过IIS再转发到Kestrel,若Kestrel限制比IIS宽松,实际生效的是IIS配置;若更严格也会生效,但一般没必要重复设置。 MultipartBodyLengthLimit是ASP.NET Core处理表单上传(multipart/form-data)时的限制,针对整个请求体中multipart部分的总大小。- 控制器里的检查是业务逻辑层的最后校验,属于应用内部的兜底判断。
2. 防止大文件占用带宽的必须配置
web.config中的maxAllowedContentLength是必须配置的。它是IIS层面的限制,会在请求开始接收时就校验,一旦超过限制,IIS直接拒绝请求,不会把大文件内容转发到后端应用,从根源上避免了大文件占用服务器带宽的问题。
其他配置比如控制器检查,是文件已接收(至少部分接收)后才触发,无法阻止带宽消耗;Multipart配置是应用层面的限制,请求已经到达应用才会被拦截,仍会消耗少量带宽;Kestrel配置在IIS部署场景下优先级低于IIS配置,不是必须项。
3. 是否会在未接收文件时终止请求?
maxAllowedContentLength:会。IIS在接收请求时会检查Content-Length头部(如果存在),或实时监控接收数据的大小,一旦超过限制立即终止连接,不会接收完整文件。- Kestrel的
MaxRequestBodySize:如果生效,也会在接收请求时实时检查,超过限制就终止,但在IIS部署场景下,通常IIS已经先拦截,所以这个配置触发机会少。 MultipartBodyLengthLimit:ASP.NET Core解析multipart请求时会逐步检查,累计大小超限时终止,但此时已经接收了部分数据,会消耗少量带宽。- 控制器中的检查:在文件完整接收后才进行,完全无法提前终止请求,只能事后返回错误。
关于IIS Express测试的建议
在IIS Express中测试时,直接修改项目根目录下的web.config(ASP.NET Core项目可能需要手动添加requestFiltering节点),然后尝试上传超限制的文件,观察是否被拦截。也可以用Fiddler等工具模拟大文件上传请求,查看返回的413(Request Entity Too Large)错误状态码。
内容的提问来源于stack exchange,提问作者Luke Vo
相关产品推荐
相关产品推荐

