2016-08-01 15 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

、あなたが正しくないリスト – 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ファイルの内容をGBません。の別の終了タグが必要で、タグをタグ内に配置する必要があります。このタグはタグ内にある必要があります。そうでなければ、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はnull可です。 nullに設定すると、MVCの[DisableRequestSizeLimit]のように制限が無効になります。

要求の制限は、アプリケーションがまだ読み込みを開始していない場合にのみ設定できます。それ以外の場合は例外がスローされます。MaxRequestBodySizeプロパティが読み取り専用状態にあるかどうかを示すIsReadOnlyプロパティがあります。これは、設定が遅すぎることを意味します。

グローバル設定手順

あなたが世界的に最大リクエストボディのサイズを変更したい場合は、これはUseKestrelまたはUseHttpSysのいずれかのコールバックでMaxRequestBodySizeプロパティを変更することで行うことができます。 MaxRequestBodySizeはどちらの場合もnullable longです。例えば:あなたはおそらく、30メガバイトを意味

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

または

.UseHttpSys(options => 
{ 
    options.MaxRequestBodySize = 100_000_000; 
関連する問題