2016-08-01 47 views

回答

14

當您上傳超過30MB的任何文件時,您可能會收到404.13 HTTP狀態碼。如果您在IIS中運行ASP.Net Core應用程序,則IIS管道會在您的請求到達您的應用程序之前攔截您的請求。

更新你的web.config:

<system.webServer> 
    <handlers> 
     <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/> 
    </handlers> 
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/> 
    <!-- Add this section for file size... --> 
    <security> 
     <requestFiltering> 
     <!-- Measured in Bytes --> 
     <requestLimits maxAllowedContentLength="1073741824" /> <!-- 1 GB--> 
     </requestFiltering> 
    </security> 
    </system.webServer> 

上一頁ASP.Net應用程序也需要這部分,但它作爲你的請求被處理的中間件不再在覈心需要:

<system.web> 
    <!-- Measured in kilobytes --> 
    <httpRuntime maxRequestLength="1048576" /> 
    </system.web> 
+0

你可能意味着30MB,而不是GB – jao

12

在如果您想增加上傳文件大小,則由Visual Studio 2017製作的ASP.NET Core 1.1項目。你需要自己創建的web.config文件,並添加以下內容:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.webServer> 
    <security> 
     <requestFiltering> 
     <!-- 1 GB --> 
     <requestLimits maxAllowedContentLength="1073741824" /> 
     </requestFiltering> 
    </security> 
    </system.webServer> 
</configuration> 

在Startup.cs文件,添加這些內容:

public void ConfigureServices(IServiceCollection services) 
{ 
    services.Configure<FormOptions>(x => 
    { 
     x.ValueLengthLimit = int.MaxValue; 
     x.MultipartBodyLengthLimit = int.MaxValue; 
     x.MultipartHeadersLengthLimit = int.MaxValue; 
    }); 

    services.AddMvc(); 
} 
+1

你列出不正確的web.config文件的內容;您需要使用另一個結束標記,而標記需要放在標記內,而標記又需要位於標記內。如果沒有,您將收到HTTP 500錯誤。 –

19

其他的答案解決IIS限制。但是,截至ASP.NET Core 2.0,Kestrel服務器也強加了它自己的默認限制。

Github of KestrelServerLimits.cs

Announcement of request body size limit and solution (quoted below)

MVC說明

如果你想改變最大請求體大小限制爲特定的MVC動作或控制器,你可以使用RequestSizeLimit屬性。以下將允許MyAction接受高達100,000,000字節的請求體。

[HttpPost] 
[RequestSizeLimit(100_000_000)] 
public IActionResult MyAction([FromBody] MyViewModel data) 
{ 

[DisableRequestSizeLimit]可用於使請求大小無限制。這有效地恢復了2.0.0版本以前的行爲,只是爲了分配屬性的操作或控制器。

通用中間件說明書

如果請求不被通過MVC動作處理,所述限制仍然可以使用所述IHttpMaxRequestBodySizeFeature每個請求基礎的修正。例如:

app.Run(async context => 
{ 
    context.Features.Get<IHttpMaxRequestBodySizeFeature>().MaxRequestBodySize = 100_000_000; 

MaxRequestBodySize是一個可爲空的long。將其設置爲null將禁用像MVC的[DisableRequestSizeLimit]這樣的限制。

如果應用程序尚未開始讀取,您只能配置請求限制;否則會引發異常。有一個IsReadOnly屬性,告訴您MaxRequestBodySize屬性是否處於只讀狀態,這意味着配置限制太遲了。

全局配置說明

如果你想在全球範圍內修改最大請求的車身尺寸,這可以通過在任一UseKestrelUseHttpSys回調修改MaxRequestBodySize屬性來完成。在這兩種情況下,MaxRequestBodySize都是可以爲空的。例如:

.UseKestrel(options => 
{ 
    options.Limits.MaxRequestBodySize = null; 

.UseHttpSys(options => 
{ 
    options.MaxRequestBodySize = 100_000_000;