FAQ,但新版IIS需要設定兩個地方才會運作(開放檔案上傳的限制)
以Web.config 為例, .NET 4.x版(.NET Framework 4.x版)為例
以前只要設定一個地方即可
新版IIS需要設定兩個地方才行:
以Web.config 為例, .NET 4.x版(.NET Framework 4.x版)為例
<syste.web>
<!-- 250 秒可執行時間長度,檔案限制 307 MB ( Unit: Kilo Bytes。注意!!這裡的單位是KB = 307,200 KB) -->
<httpRuntime targetFramework="4.8" enableVersionHeader="False" executionTimeout="250" maxRequestLength="307200" />
</system.web>
<system.webServer>
<security>
<requestFiltering> <!--file upload limitation -->
<!-- 300 秒可執行時間長度,檔案限制 307 MB ( 307,200,000 "Bytes"。 注意!跟上面的單位 "KB" 不一樣喔!) -->
<requestLimits maxAllowedContentLength="307200000" maxUrl="6144" maxQueryString="3072" />
</requestFiltering>
</security>
<!-- ********************************************************* -->
</system.webServer>
底下(第二個設定)可以在IIS裡面找到
但第一個設定,必須手動進入 Web.config設定檔修改。
以上是以 .NET 4.x版(.NET Framework 4.x版)為例
===================================================
如果是 ASP .NET Core MVC該如何處理? (.NET Core / 開源 .NET / 開放原始碼 .NET )
===================================================
除了上面IIS的 Web.Config(如下),您仍要設定以外。或是透過 IIS管理畫面來調整(請參閱上面兩張圖片)
<system.webServer>
<security>
<requestFiltering> <!--file upload limitation -->
<!-- 300 秒可執行時間長度,檔案限制 307 MB ( 307,200,000 "Bytes"。 注意!檔案大小的單位!) -->
<requestLimits maxAllowedContentLength="307200000" maxUrl="6144" maxQueryString="3072" />
</requestFiltering>
</security>
<!-- ********************************************************* -->
</system.webServer>
ASP.NET Core MVC的「設定檔」修改如下。請特別注意一開始的「builder」關鍵字,
因為 Program.cs設定檔分成 : 上 / 下兩個部分,不要搞錯。
這些的設定是放在「上半部」
// 如果不知道什麼是 Kestrel ,請看下面補充說明。
builder.WebHost.ConfigureKestrel(options =>
{
options.Limits.MaxRequestBodySize = 1073741824; // 註解: 1GB。單位是 Bytes
});
builder.Services.Configure<FormOptions>(options =>
{
// 參考範例,檔案上傳大小,限制256 MB
// options.MultipartBodyLengthLimit = 268435456;
options.ValueLengthLimit = int.MaxValue; // 後面的數值,請自己填入檔案大小的數字,單位是 Bytes.
options.MultipartBodyLengthLimit = int.MaxValue;
options.MultipartHeadersLengthLimit = int.MaxValue;
});
MVC的 控制器 (Controller)或是 動作 (Action) 裡面
[HttpPost]
[RequestSizeLimit(1073741824)] // 註解: 1GB。單位是 Bytes
// 完全取消限制,但真心 "不建議" 這樣做! [DisableRequestSizeLimit]
public IActionResult Upload(IFormFile file)
{
// 處理檔案上傳
}
註解與補充:(資料來源:CoPilot - AI)
Kestrel 是 ASP.NET Core "內建"的跨平台 Web 伺服器,用來處理 HTTP 要求。當你在 Windows、Linux 或 macOS 上開發 ASP.NET Core 應用程式時,Kestrel 是預設的伺服器。
– 它速度快、效能好,適合用於開發與生產環境。
– 在 Windows 上部署時,Kestrel 通常會搭配 IIS 使用。
當你在 Windows 上使用 IIS 發佈 ASP.NET Core 應用程式時,其實是這樣運作的:
– IIS 接收來自瀏覽器的請求。
– IIS 透過一個叫做 ASP.NET Core Module (ANCM) 的中介,把請求轉交給 Kestrel。
– Kestrel 處理請求,然後回傳結果給 IIS,再由 IIS 回傳給瀏覽器。
所以即使你「只用 IIS」,其實背後還是有 Kestrel 在運作。
沒有留言:
張貼留言