2016-08-01 17 views

cevap

14

30 MB'den büyük bir dosya yüklediğinizde muhtemelen 404.13 HTTP durum kodu alıyorsunuzdur. ASP.Net Core uygulamanızı IIS'de çalıştırıyorsanız, IIS boru hattı, isteğinizi uygulamanıza ulaşmadan önce durdurur.

Güncelleme 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> 

Önceki ASP.Net uygulamaları da bu bölümü gerekli ancak istekleri katman tarafından işlenir gibi Core artık gerekli değil: In

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

, doğru değildir listelemek – jao

12

Yükleme dosyasının boyutunu artırmak istiyorsanız, Visual Studio 2017 tarafından hazırlanan ASP.NET Core 1.1 projesi. Bu içeriği kendiniz web.config dosyası oluşturmak ve eklemek gerekir:

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

, bu içerik eklemek:

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 içeriğini GB değil; için başka bir kapatma etiketine ihtiyacınız vardır ve etiketinin etiketinin içine yerleştirilmesi gerekir, bu da etiketinin içinde olmalıdır. Değilse, HTTP 500 hatası alırsınız. –

19

diğer cevaplar, IIS kısıtlama çözmek. Ancak, ASP.NET Çekirdek 2.0 itibariyle, Kestrel sunucusu ayrıca kendi varsayılan sınırlarını dayatır.

Github of KestrelServerLimits.cs

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

MVC Talimatları

Belirli bir MVC eylem veya denetleyici için maksimum istek vücut boyut sınırını değiştirmek isterseniz, RequestSizeLimit özelliğini kullanabilirsiniz. Aşağıdakiler, MyAction'un 100.000.000 bayta kadar istek gövdelerini kabul etmesine izin verir.

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

[DisableRequestSizeLimit]

istek boyutu sınırsız hale getirmek için kullanılabilir. Bu, etkinleştirilmiş eylem veya denetleyici için 2.0.0 öncesi davranışı etkili bir şekilde geri yükler.

Genel Ara katman talimatlarını talep MVC hareketiyle işlenen değilse

, sınır yine IHttpMaxRequestBodySizeFeature kullanarak bir istek bazında değiştirilebilir. Örneğin:

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

MaxRequestBodySize bir null uzun. Null olarak ayarlamak, MVC'nin [DisableRequestSizeLimit] gibi sınırını devre dışı bırakır.

Yalnızca uygulamayı henüz okumaya henüz başlamadıysa, istek üzerine sınırı yapılandırabilirsiniz; Aksi halde bir istisna atılır.MaxRequestBodySize özelliğinin salt okunur durumda olup olmadığını bildiren IsReadOnly özelliği vardır; bu, sınırı yapılandırmak için çok geç olduğu anlamına gelir.

Küresel Yapılandırma Talimatları

Eğer global maksimum istek vücut boyutunu değiştirmek istiyorsanız

, bu UseKestrel veya UseHttpSys ya geri dönüşünde bir MaxRequestBodySize özelliğini değiştirerek yapılabilir. MaxRequestBodySize, her iki durumda da null uzun. Örneğin: Muhtemelen 30MB geliyordu

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

veya

.UseHttpSys(options => 
{ 
    options.MaxRequestBodySize = 100_000_000; 
İlgili konular