You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 6使用IISExpress上传大文件返回413错误问题排查

问题根因

413错误是IIS Express自身的请求过滤层拦截导致的,和你在ASP.NET Core代码里配置的Kestrel、IISServerOptions、接口特性的限制没有关系。
IIS(包括Express版本)的请求处理是分层的:请求到达后首先经过IIS核心的请求过滤模块校验,校验通过后才会转发给ASP.NET Core模块,进入你写的应用逻辑。你代码里配置的IISServerOptions.MaxRequestBodySize只对ASP.NET Core模块层生效,管不到IIS核心层的校验规则。
IIS Express默认的请求体最大允许长度是30000000字节(约28.6MB),小于你上传的80MB文件,所以请求还没进入应用就被直接拦截返回413。Kestrel自托管模式下不经过IIS层,所有限制都是你代码里配置的120MB,所以上传正常。

修复方法

在项目根目录添加或修改web.config文件,配置IIS核心层的请求长度上限即可,配置值单位为字节,示例配置如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <security>
      <requestFiltering>
        <!-- 配置为120MB,和代码层的限制保持一致 -->
        <requestLimits maxAllowedContentLength="120000000" />
      </requestFiltering>
    </security>
  </system.webServer>
</configuration>

配置完成后重启IIS Express即可正常上传80MB文件。

补充注意点
  • 这个配置在部署到完整版IIS的生产环境时同样需要保留,否则生产环境IIS也会出现相同的413问题,仅靠代码层配置无法覆盖IIS核心层的限制。
  • 大文件上传涉及三层独立限制,必须保证三层的上限都大于实际上传的文件大小:
    • IIS/ IIS Express核心层:web.config中maxAllowedContentLength配置
    • Web服务器层:Kestrel的MaxRequestBodySize或IIS模块的MaxRequestBodySize配置
    • 表单层:接口上[RequestFormLimits]配置的MultipartBodyLengthLimit
  • 不建议直接修改IIS Express全局配置解决问题,会影响本机所有IIS Express启动的站点,用项目级web.config配置是最稳妥的方案。

内容的提问来源于stack exchange,提问作者Christian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 18:36:22