IIS asp.net webservice 如何上传超大文件或内容

IIS asp.net webservice 如何上传超大文件或内容,由于默认的大小才4M左右,明显不够用的,需要在web.config中进行自定义大小。

<?xml version="1.0" encoding="utf-8"?>

<configuration>

<system.web>

<!-- 100MB,超时10分钟 -->

<httpRuntime maxRequestLength="102400" executionTimeout="600" />

<customErrors mode="Off"></customErrors>

</system.web>

<system.webServer>

<security>

<requestFiltering>

<!-- 100MB 字节 -->

<requestLimits maxAllowedContentLength="104857600" />

</requestFiltering>

</security>

</system.webServer>

</configuration>

# 核心一句话

`` 是 **[ASP.NET](https://ASP.NET) 运行时限制**(.NET Framework);

`` 是 **IIS 内核级限制**。

**两个是独立关卡,必须同时配置,取较小值生效**。

>

> 单位不一样!这点很多人踩坑:

>

>

> - `maxRequestLength`:**KB**

> - `maxAllowedContentLength`:**Bytes(字节)**

> 你当前配置:

> - `maxRequestLength="102400"` → 102400 KB = 104,857,600 Byte(100MB)

> - `maxAllowedContentLength="104857600"` → 正好也是 100MB,两者匹配。

## 1、

- 归属:`system.web`,**[ASP.NET](https://ASP.NET) 托管引擎**

- 作用:请求进入[ASP.NET](https://ASP.NET)管道之后,才会校验大小。

- 适用:经典模式 + 集成模式都生效。

- 限制对象:托管代码层面,超过这个值,[ASP.NET](https://ASP.NET) 抛出 `HttpException`。

- ⚠️ IIS 集成模式下,**IIS 内核会先拦截**,如果 IIS 限制更小,[ASP.NET](https://ASP.NET)根本接收不到请求,直接返回 413。

## 2、

- 归属:`system.webServer/security/requestFiltering`,**IIS 原生模块(requestFiltering)**

- 作用:在内核层面就检查请求体大小,**请求还没进入[ASP.NET](https://ASP.NET)托管管道就拦截**。

- 仅 IIS7+ 集成模式使用(现在 IIS 默认都是集成模式)。

- 超过直接返回:`413 Request Entity Too Large`,不会进.NET 代码。

# 为什么两处都要写?

1、**两道关卡,先过 IIS,再过[ASP.NET](https://ASP.NET)**

请求流程:

客户端 → IIS 内核(requestFiltering)→ [ASP.NET](https://ASP.NET)管道(httpRuntime)

只要任意一个上限更小,就会被拦截。

举例子:

只改了 `maxRequestLength="102400"`,但 IIS 默认`maxAllowedContentLength`很小(默认约 30MB)。

上传 > 30MB 文件,**直接被 IIS 拦截返回 413,[ASP.NET](https://ASP.NET)代码根本不会执行**。

反过来,只改 IIS 的`maxAllowedContentLength`,`maxRequestLength`保持默认 4MB,上传 50MB:IIS 放行,进入[ASP.NET](https://ASP.NET),被.NET 抛出异常。

>

> 所以生产环境一般**两者数值对齐**,避免迷惑。

## 额外:executionTimeout="600"

也是`system.web/httpRuntime`下面的,**[ASP.NET](https://ASP.NET)托管执行超时**(单位:秒),不是 IIS 超时。

- executionTimeout:托管代码执行超时,请求进[ASP.NET](https://ASP.NET)之后开始计时。

- IIS 还有自己的`connectionTimeout`(连接超时),在站点高级设置,别搞混。

## 你的 web.config 小优化建议

```

<?xml version="1.0" encoding="utf-8"?>

<configuration>

<system.web>

<!-- 100MB,单位KB;超时10分钟 -->

<httpRuntime maxRequestLength="102400" executionTimeout="600" />

<customErrors mode="Off"></customErrors>

</system.web>

<system.webServer>

<security>

<requestFiltering>

<!-- 100MB,单位字节 -->

<requestLimits maxAllowedContentLength="104857600" />

</requestFiltering>

</security>

</system.webServer>

</configuration>

```

### 补充坑点

1. 上传大文件,除了大小限制,还要留意**IIS 的 uploadReadAheadSize**,超大文件场景偶尔会遇到;

2. `customErrors mode="Off"` 只对[ASP.NET](https://ASP.NET)错误有效,IIS 原生 413 这类错误不受这个控制;

3. 如果是 WebForms / WebAPI 项目,这套配置适用 .NET Framework;.NET Core/.NET5+ 完全不一样,没有 httpRuntime 这一套。

文件名精灵2025年最新版 机器翻译 AI智能
...
批量修改文件名称、文件夹名称

免费使用 功能无限制

全面接入机器自动翻译功能,主流AI大模型智能改名

方便快捷,支持正则表达式、无需安装功能齐全、支持定制无广告、无插件,放心使用。

点击下载 点击下载
本站中所有的计算器的计算结果仅供参考,本站对此结果的准确性不承担任何责任,实际数额以银行/保险公司/国家相关机构确认的结果为准。
在线客服QQ:543690914,备案号: 苏ICP备15037649号-27。东海县白塔埠镇佳诚电脑经营部版权所有。