前言
大部份的系統都有上傳檔案功能,當上傳檔案超過預設的大小時,系統就會發出 too large 的錯誤,如下,
IIS 10.0 Detailed Error - 413.1 - Request Entity Too Large 要求篩選模組設定為拒絕超過要求內容長度的要求
Failed to read the request form. Request body too large. The max request body size is 30000000 bytes.
解法
1.先建立 ASP.NET Core WebAPI 專案,並建立測試的 File Upload Controller,
1 | [ ] |
就可以透過 Postman 上測試上傳檔案
IIS 上的解法
當部署在 IIS 上面時,Client 發出 Request 時,會先到 IIS 才會再交給 我們的程式,
所以如果檔案超過 30,000,000 bytes 時,就會噴 IIS 10.0 Detailed Error - 413.1 - Request Entity Too Large 要求篩選模組設定為拒絕超過要求內容長度的要求 的錯誤,並要求在 web.config 設定 maxAllowedContentLength 的值,如下,
所以這時,就需要在 web.config 設定 maxAllowedContentLength,例如設定最大為 60MB,
1 |
|
Kestrel 上的解法
因為 Kestrel 不會去看 web.config ,所以要在程式中設定它,如下,
1 | //program.cs |
註: 以上是針對整個系統設定,所以在 Upload 的 Action 設定中斷點,查看 HttpContext.Features.MaxRequestBodySize 它的值就是 62914560,如下,
Action 微調
如果要針對某個 Class or Action 設定不同於全域的檔案大小,則可以透過 RequestSizeLimit 屬性來設定,
例如在 UploadAsync 及 Upload2Async 分別設定 RequestSizeLimit 為 2,222 及 3,333 ,
HttpContext.Features.MaxRequestBodySize 也會為 2,222 及 3,333
- 註: 如果是在 IIS 的話,如果上傳的檔案大於 30000000 bytes,一定要設定 Web.config。其他 Action 如果要縮小 Size ,就再設定 RequestSizeLimit 屬性