Razor Pages上传大视频报Request Entity Too Large错误
问题原因
IIS托管ASP.NET Core应用时,请求会先经过IIS的请求过滤模块校验,校验通过后才会转发给Kestrel和ASP.NET Core管线处理。你之前调整的FormOptions、KestrelServerOptions、[RequestFormLimits]都是应用层配置,请求还没走到应用层就被IIS默认的请求大小限制拦截了,才会返回413 Request Entity Too Large错误。
IIS默认允许的最大请求体大小约为28.6MB,超过这个值就会直接返回报错,和你应用里的配置无关。
解决方案
1. 配置web.config放开IIS层限制
在项目根目录的web.config中添加IIS请求过滤配置,注意两个配置项的单位不要搞混:
<?xml version="1.0" encoding="utf-8"?> <configuration> <location path="." inheritInChildApplications="false"> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="dotnet" arguments=".\你的项目程序集名.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" /> <!-- 新增:配置IIS请求过滤阈值 --> <security> <requestFiltering> <!-- 单位:字节,示例配置为1GB,可按需调整大小 --> <requestLimits maxAllowedContentLength="1073741824" /> </requestFiltering> </security> </system.webServer> </location> <!-- 新增:兼容IIS集成模式请求大小校验 --> <system.web> <!-- 单位:KB,数值需和上面的maxAllowedContentLength对应,示例为1GB --> <httpRuntime maxRequestLength="1048576" /> </system.web> </configuration>
2. 排查配置冲突
你当前在PageModel类上标注的[RequestFormLimits(MultipartBodyLengthLimit = 104857600)]限制为100MB,如果需要上传超过100MB的文件:
- 要么把这个特性的参数值调整为和你全局配置一致的大小
- 要么直接删除这个特性,使用你在
Startup.cs中配置的全局FormOptions规则即可,避免局部特性覆盖全局配置导致不生效。
3. 本地IIS Express调试额外配置
如果本地用IIS Express调试时仍然报错,需要打开项目根目录下隐藏的.vs文件夹,找到config/applicationhost.config文件,修改对应站点的requestFiltering配置,把maxAllowedContentLength调整为你需要的大小即可。
注意:所有配置修改完成后,需要重启IIS站点或者重启调试进程,配置才会生效。
报错截图

内容的提问来源于stack exchange,提问作者Ervin Lara
相关产品推荐
相关产品推荐

