2016-08-01 24 views

Antwort

14

Sie erhalten wahrscheinlich einen HTTP-Statuscode 404.13, wenn Sie eine Datei über 30 MB hochladen. Wenn Sie Ihre ASP.Net Core-Anwendung in IIS ausführen, fängt die IIS-Pipeline Ihre Anforderung ab, bevor sie Ihre Anwendung erreicht.

Aktualisieren Sie Ihre 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> 

Zurück ASP.Net-Anwendungen auch diesen Abschnitt erforderlich, aber es ist nicht mehr in Kern benötigt als Ihre Anträge von Middleware behandelt werden:

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

Sie wahrscheinlich 30MB gemeint, GB nicht – jao

12

In ASP.NET Core 1.1-Projekt, das von Visual Studio 2017 erstellt wurde, wenn Sie die Upload-Dateigröße erhöhen möchten. Sie müssen web.config Datei selbst erstellen, und fügen Sie diesen Inhalt:

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

In Startup.cs Datei, diese Inhalte hinzufügen:

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

    services.AddMvc(); 
} 
+1

der web.config Inhalt Sie Liste sind nicht korrekt; Sie benötigen ein weiteres schließendes Tag für, und das -Tag muss in das -Tag eingefügt werden, das wiederum innerhalb des -Tags sein muss. Wenn nicht, erhalten Sie HTTP 500 Fehler. –

19

Die anderen Antworten lösen, um die IIS-Restriktions. Ab ASP.NET Core 2.0, Kestrel-Server auferlegt auch seine eigenen Standardgrenzwerte.

Github of KestrelServerLimits.cs

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

MVC Anleitung

Wenn Sie die max Anfrage Körpergrößenbegrenzung für eine bestimmte MVC Aktion oder Controller ändern möchten, können Sie das RequestSizeLimit Attribut verwenden. Das Folgende würde MyAction ermöglichen, Anforderungsstellen bis zu 100.000.000 Bytes zu akzeptieren.

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

[DisableRequestSizeLimit] kann verwendet werden, um Anforderungsgröße unbegrenzt zu machen. Dadurch wird das Verhalten vor 2.0.0 für die zugewiesene Aktion oder den Controller wiederhergestellt.

generische Middleware Instructions

Wenn die Anforderung von einer MVC Aktion nicht behandelt wird, kann immer noch die Grenze auf einer Basis pro Anforderung modifiziert werden, um die IHttpMaxRequestBodySizeFeature verwenden. Zum Beispiel:

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

MaxRequestBodySize ist ein nullable lang. Wenn Sie den Wert auf null setzen, wird das Limit wie bei MVC [DisableRequestSizeLimit] deaktiviert.

Sie können das Limit nur für eine Anfrage konfigurieren, wenn die Anwendung noch nicht gestartet wurde; Andernfalls wird eine Ausnahme ausgelöst.Es gibt eine IsReadOnly-Eigenschaft, die Ihnen mitteilt, ob die MaxRequestBodySize-Eigenschaft schreibgeschützt ist, was bedeutet, dass es zu spät ist, das Limit zu konfigurieren.

Globale Config Anleitung

Wenn Sie die max Anfrage Körpergröße global zu ändern, kann dies durch Modifizieren eine MaxRequestBodySize Eigenschaft in der Callback entweder von UseKestrel oder UseHttpSys erfolgen. MaxRequestBodySize ist in beiden Fällen ein NULL-Wert. Zum Beispiel:

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

oder

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