首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET 解決 4MB 上傳限制:修改機器層級 Machine.config 與 Web.config 雙重設定 ASP.NET 解決 4MB 上傳限制:修改機器層級 Machine.config 與 Web.config 雙重設定

     編輯:ASP.NET 基礎

問題根源

ASP.NET 預設 maxRequestLength="4096" (4 MB),超過此大小的上傳請求會被直接拒絕 (HTTP 400),不進入應用程式管線。若需上傳大檔,必須調整此設定。

兩個設定層級

修改 Machine.config (機器層級,影響所有網站)

64 位元系統路徑

C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.config

32 位元系統路徑

C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config

編輯步驟

  1. 以系統管理員身分開啟記事本,開啟上述 machine.config
  2. 尋找 <system.web> 區段
  3. 在 <authorization> 節點**之前**插入 <httpRuntime> 設定:
<system.web>
    <!-- 新增此行:maxRequestLength=40960 KB (40 MB),executionTimeout=90 秒 -->
    <httpRuntime executionTimeout="90" maxRequestLength="40960" useFullyQualifiedRedirectUrl="false" 
                 minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" />
    
    <authorization>
        <allow users="*" />
    </authorization>
    ...
</system.web>
  1. 儲存檔案 (需管理員權限)
  2. 重啟 IIS:iisreset 或「服務」重啟 World Wide Web Publishing Service

修改 Web.config (應用程式層級,建議做法)

**最佳實務:僅修改專案的 web.config,不動 machine.config**,避免影響同機器其他網站,且隨專案部署遷移。

<configuration>
  <system.web>
    <httpRuntime 
        maxRequestLength="102400"         <!-- 100 MB (KB) -->
        executionTimeout="600"            <!-- 10 分鐘 (秒) -->
        requestLengthDiskThreshold="256"  <!-- 256 KB 以上寫磁碟 -->
        enableVersionHeader="false"       <!-- 安全性 -->
    />
  </system.web>

  <!-- IIS 7+ 整合模式額外需設定 -->
  <system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="104857600" /> <!-- 100 MB (Bytes) -->
      </requestLimits>
    </requestFiltering>
    </security>
  </system.webServer>
</configuration>

關鍵參數對照表

層級檔案位置影響範圍優先序
機器層級C:\Windows\Microsoft.NET\Framework[64]\[版本]\CONFIG\machine.config該機器上所有 ASP.NET 應用程式最低 (被 Web.config 覆蓋)
應用程式層級專案根目錄 web.config單一應用程式最高 (覆蓋 machine.config)
參數位置單位預設值建議大檔值說明
maxRequestLengthsystem.web/httpRuntimeKB4096102400 (100 MB)ASP.NET 管線層級限制
executionTimeoutsystem.web/httpRuntime秒110600 (10 分鐘)請求處理逾時
requestLengthDiskThresholdsystem.web/httpRuntimeKB256256超過此大小改用磁碟暫存
maxAllowedContentLengthsystem.webServer/security/requestFiltering/requestLimitsBytes30000000 (30 MB)104857600 (100 MB)IIS 7+ 請求過濾層級限制

單位陷阱提醒 ⚠

  • maxRequestLength:**KB** (千位元組)
  • maxAllowedContentLength:**Bytes** (位元組)
  • 換算:100 MB = 100 * 1024 = 102400 KB = 104857600 Bytes

驗證設定是否生效

  1. 建立測試頁面,上傳 50 MB 檔案
  2. 觀察:成功上傳 → 設定生效;失敗顯示 400/404/413 → 檢查單位、IIS 重啟、應用程式集區回收
  3. 開發者工具 Network 面板確認 Request/Response 標頭

進階:超大檔 (100MB+) 架構建議

單一請求傳輸 100MB+ 易發生逾時、記憶體壓力、網路中斷重傳困難。企業級系統採用:

  1. 分塊上傳 (Chunked Upload):前端切割 1-5 MB 片段,並行上傳,後端合併
  2. 斷點續傳:記錄已上傳片段,中斷後續傳
  3. 直傳雲端儲存:前端取得簽名 URL,直接上傳至 Azure Blob / AWS S3 / 阿里云 OSS,後端僅驗證回調
  4. 流式處理:ASP.NET Core IFormFile / MultipartReader 邊收邊寫磁碟,不載入記憶體

總結

解決 ASP.NET 4MB 上傳限制:**優先修改專案 web.config** 設定 httpRuntime.maxRequestLength (KB) 與 executionTimeout (秒);IIS 7+ 必須同步設定 requestFiltering.maxAllowedContentLength (Bytes)。**單位換算務必精確**。機器層級 machine.config 修改雖有效但影響面廣,不建議常規使用。大檔上傳架構請採用分塊/直傳雲端模式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved