Panjang permintaan maksimum terlampaui.

1050

Saya mendapatkan kesalahan Panjang permintaan maksimum terlampaui saat saya mencoba mengunggah video di situs saya.

Bagaimana cara saya memperbaikinya?

Surya sasidhar
sumber

Jawaban:

1973

Jika Anda menggunakan IIS untuk hosting aplikasi Anda, maka ukuran file unggahan default adalah 4MB. Untuk meningkatkannya, silakan gunakan bagian di bawah ini di web.config-

<configuration>
    <system.web>
        <httpRuntime maxRequestLength="1048576" />
    </system.web>
</configuration>

Untuk IIS7 dan di atasnya, Anda juga perlu menambahkan baris di bawah ini:

 <system.webServer>
   <security>
      <requestFiltering>
         <requestLimits maxAllowedContentLength="1073741824" />
      </requestFiltering>
   </security>
 </system.webServer>

Catatan :

  • maxRequestLengthdiukur dalam kilobyte
  • maxAllowedContentLengthdiukur dalam byte

itulah sebabnya nilainya berbeda dalam contoh konfigurasi ini. (Keduanya setara dengan 1 GB.)

Sachin Shanbhag
sumber
7
Terima kasih sachin dan saya menambahkan beberapa hal seperti <httpRuntime maxRequestLength = "32768" eksekusiTimeout = "180" />
Surya sasidhar
11
maxAllowedContentLength harus dalam byte, bukan kilobyte, jadi contoh yang diberikan tidak setara.
Matthew Sharpe
33
Dengan IIS 7.5 dan VS RC 2012 IIS Express saya harus mengatur KEDUA dari ini. Yang httpRuntime mengkonfigurasi panjang maksimum ASP.NET sementara requestLimits mengkonfigurasi panjang maks IIS, stackoverflow.com/questions/6327452/… dan forums.iis.net/t/1169846.aspx
Despertar
18
Perlu ditunjukkan, sekali lagi, bahwa maxAllowedContentLength adalah dalam byte, bukan kilobyte. Kedua nilai tersebut seharusnya bukan angka yang sama, karena keduanya bukan unit pengukuran yang sama.
Pandincus
13
Pastikan Anda menambahkan pengaturan ini ke utama Web.configalih-alih yang ada di dalam Viewsfolder
Serj Sagan
553

Saya tidak berpikir itu telah disebutkan di sini, tetapi untuk membuatnya bekerja, saya harus menyediakan kedua nilai ini di web.config:

Di system.web

<httpRuntime maxRequestLength="1048576" executionTimeout="3600" />

Dan masuk system.webServer

<security>
    <requestFiltering>
        <requestLimits maxAllowedContentLength="1073741824" />
    </requestFiltering>
</security>

PENTING : Kedua nilai ini harus cocok. Dalam hal ini, unggahan maksimum saya adalah 1024 megabita.

maxRequestLength memiliki 1048576 KILOBYTES , dan maxAllowedContentLength memiliki 1073741824 BYTES .

Saya tahu ini sudah jelas, tetapi mudah untuk diabaikan.

Karl
sumber
5
Bagi siapa pun yang berkepentingan: Jawaban ini juga berfungsi dengan baik untuk IIS-Express (asp.net-webpage dengan WebMatrix)
VoidKing
5
Ya, ini adalah jawaban yang berhasil bagi saya alih-alih jawaban Sachin. Ini bekerja pada Azure juga.
Gautam Jain
5
Ini jelas jawaban yang tepat ... kedua entri harus ada. Dalam hal MVC 3, bisa dalam web.configfile root proyek .
Miguel Angelo
2
Hal lain yang penting adalah 'eksekusi Timeout' yang disebut oleh Karl
Muhammad Amin
26
Saya harus menggabungkan ini dengan baris yang ada untuk: <httpRuntime targetFramework = "4.5" maxRequestLength = "1048576" executTimeout = "3600" />
Ken Mc
195

Mungkin perlu dicatat bahwa Anda mungkin ingin membatasi perubahan ini ke URL yang Anda harapkan akan digunakan untuk mengunggah daripada seluruh situs Anda.

<location path="Documents/Upload">
  <system.web>
    <!-- 50MB in kilobytes, default is 4096 or 4MB-->
    <httpRuntime maxRequestLength="51200" />
  </system.web>
  <system.webServer>
    <security>
      <requestFiltering>
        <!-- 50MB in bytes, default is 30000000 or approx. 28.6102 Mb-->
        <requestLimits maxAllowedContentLength="52428800" /> 
      </requestFiltering>
    </security>
  </system.webServer>
</location>
Nick Albrecht
sumber
Solusi Bagus memikirkan lokasi. Tetapi apakah ada jalur lokasi saat bekerja dengan MVC (dan karenanya bekerja dengan rute)?
Luuk Krijnen
1
Ini akan menjadi URL yang sesuai dengan rute yang telah Anda atur tindakan unggahan Anda. Dalam kasus saya, saya memiliki pengontrol Dokumen dengan tindakan yang disebut Unggah yang saya kirimi formulir. Dalam kasus Anda itu akan menjadi apa pun url tindakan Anda.
Nick Albrecht
Bagi siapa pun yang menyukai jawaban ini, lihat ini .
DontVoteMeDown
2
Bung kamu batu. Maaf, tapi suara kecil saya yang kecil tidak cukup.
Nicholas Petersen
1
Ini akan bekerja dengan WebAPI hingga dan termasuk MVC v5. Setelah Anda menekan ASP.NET Core dengan MVC Core, maka ada opsi berbeda yang harus Anda tetapkan untuk Kestrel.
Nick Albrecht
44

Dan untuk berjaga-jaga jika seseorang mencari cara untuk menangani pengecualian ini dan menunjukkan penjelasan yang berarti kepada pengguna (sesuatu seperti "Anda mengunggah file yang terlalu besar"):

//Global.asax
private void Application_Error(object sender, EventArgs e)
{
    var ex = Server.GetLastError();
    var httpException = ex as HttpException ?? ex.InnerException as HttpException;
    if(httpException == null) return;

    if (((System.Web.HttpException)httpException.InnerException).WebEventCode == System.Web.Management.WebEventCodes.RuntimeErrorPostTooLarge)
    {
        //handle the error
        Response.Write("Too big a file, dude"); //for example
    }
}

(Diperlukan ASP.NET 4 atau lebih baru)

Serge Shultz
sumber
1
maxAllowedContentLength harus lebih tinggi dari (maxRequestLength * 1024) untuk generasi pengecualian.
Der_Meister
Posting ini memberi saya apa yang saya butuhkan untuk memperingatkan pengguna tetapi HttpContext.Current.ClearError()diperlukan agar bisa Response.Redirect()berfungsi dengan baik. Dalam hal web.configini berfungsi hanya dengan maxRequestLengthatribut httpRuntime.
nrod
Validasi ukuran file dan pesan yang mudah digunakan dapat dilakukan melalui JS di tingkat halaman menggunakan onchangeacara di tombol unggah dan membandingkan ukuran file unggahan dengan batas unggah maksimal.
Alfred Wallace
29

Ukuran permintaan maksimum adalah, secara default, 4MB (4096 KB)

Ini dijelaskan di sini .

Artikel di atas juga menjelaskan cara memperbaiki masalah ini :)

Dave
sumber
4
Tautan ini mengarahkan saya ke beranda dukungan microsoft
Uskup
1
Mungkin ada yang salah. Tautan dialihkan ke sini
gofr1
22

Jika Anda tidak dapat memperbarui file konfigurasi tetapi kontrol kode yang menangani unggahan file gunakan HttpContext.Current.Request.GetBufferlessInputStream(true).

The truenilai disableMaxRequestLengthparameter memberitahu kerangka untuk mengabaikan batas permintaan dikonfigurasi.

Untuk deskripsi terperinci, kunjungi https://msdn.microsoft.com/en-us/library/hh195568(v=vs.110).aspx

Sergey Tarasov
sumber
LUAR BIASA, jadi bagaimana jawaban teratas memiliki> 1600 suara, dan ini hanya 5? Ini hebat, karena begitu sering, hanya satu tindakan yang kita inginkan. Selanjutnya, tidak mengacaukan pengaturan lain, dll.
Nicholas Petersen
Ini yang saya cari.
Chris Catignani
20

Ada elemen di web.config untuk mengonfigurasi ukuran maksimal file yang diunggah:

<httpRuntime 
    maxRequestLength="1048576"
  />
ema
sumber
11

Untuk merangkum semua jawaban di satu tempat:

<system.web>
  <httpRuntime targetFramework="4.5.2" maxRequestLength="1048576"/>
</system.web>

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="1073741824" />
    </requestFiltering>
  </security>
</system.webServer>

Aturan:

  • Nilai maxRequestLength (dinyatakan dalam kb) harus cocok dengan maxAllowedContentLength (dinyatakan dalam byte).
  • sebagian besar waktu bagian system.web Anda mungkin sudah mengandung "httpRuntime". atur targetFramework Anda ke versi .net yang digunakan.

Catatan:

  • nilai default untuk maxRequestLength adalah 4096 (4mb). nilai maks adalah 2.147.483.647
  • nilai default untuk maxAllowedContentLength adalah 30.000.000 (sekitar 30mb). nilai maks adalah 4.294.967.295

info lebih lanjut MSDN

BernieSF
sumber
8

maxRequestLength (panjang dalam KB) Di sini sebagai ex. Saya mengambil 1024 (1MB) maxAllowedContentLength (panjang dalam Bytes) harus sama dengan maxRequestLength Anda (1048576 bytes = 1MB).

<system.web>
   <httpRuntime maxRequestLength="1024" executionTimeout="3600" />
</system.web>

<system.webServer>
   <security>
      <requestFiltering>
          <requestLimits maxAllowedContentLength="1048576"/>
      </requestFiltering>
   </security>
</system.webServer>
UniCoder
sumber
6

Itu mengganggu saya selama berhari-hari juga. Saya memodifikasi file Web.config tetapi tidak berhasil. Ternyata ada dua file Web.config di proyek saya, dan saya harus memodifikasi satu di direktori ROOT , bukan yang lain. Semoga ini bisa membantu.

NiaoBlush
sumber
5

Jika Anda memiliki permintaan untuk membuka aplikasi di situs, pastikan Anda menetapkan maxRequestLength di root web.config. MaxRequestLength di web.config aplikasi tampaknya diabaikan.

mhenry1384
sumber
Jika saya bisa memperbaiki ini lebih dari sekali saya akan. Ini menghabiskan satu hari dalam hidupku. Jika Anda memiliki sub-aplikasi dir virtual, Anda harus meletakkan httpRuntime maxRequestLength="###dan requestLimits maxAllowedContentLengthdalam konfigurasi web di tingkat root, bukan di tingkat sub-aplikasi.
nickvans
1

Saya tersandung oleh kenyataan bahwa file web.config kami memiliki beberapa bagian system.web: berfungsi ketika saya menambahkan <httpRuntime maxRequestLength = "1048576" /> ke bagian system.web yang pada tingkat konfigurasi.

Graham Laight
sumber
1

Saya harus mengedit C:\Windows\System32\inetsrv\config\applicationHost.configfile dan menambahkan <requestLimits maxAllowedContentLength="1073741824" />ke ujung ...

<configuration>
    <system.webServer>
        <security>
            <requestFiltering>

bagian.

Sesuai Artikel Dukungan Microsoft ini

Hiperaktif
sumber
web.config dari proyek Anda sendiri harus menimpanya, jadi saya tidak melihat perlunya memodifikasi applicationHost.config.
bvgheluwe
-3

Saya dapat menambahkan ke config web yang belum dikompilasi

<system.web> 
  <httpRuntime maxRequestLength="1024" executionTimeout="3600" /> 
  <compilation debug="true"/> 
</system.web> 
<security> 
  <requestFiltering> 
    <requestLimits maxAllowedContentLength="1048576"/> 
  </requestFiltering> 
</security>
Cesar Miguel
sumber
1
The executionTimeoutatribut tidak ada hubungannya dengan apa yang diminta, dan begitu juga dengan compilationtag.
Mathias Lykkegaard Lorenzen