เกินความยาวคำขอสูงสุด


1049

ฉันได้รับข้อผิดพลาดเกินความยาวสูงสุดที่กำหนดเมื่อฉันพยายามอัปโหลดวิดีโอในเว็บไซต์ของฉัน

ฉันจะแก้ไขสิ่งนี้ได้อย่างไร

คำตอบ:


1971

หากคุณใช้ IIS สำหรับโฮสต์แอปพลิเคชันของคุณขนาดไฟล์อัปโหลดเริ่มต้นคือ 4MB หากต้องการเพิ่มโปรดใช้ส่วนด้านล่างในweb.config-

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

สำหรับ IIS7 ขึ้นไปคุณจะต้องเพิ่มบรรทัดด้านล่าง:

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

หมายเหตุ :

  • maxRequestLengthวัดเป็นกิโลไบต์
  • maxAllowedContentLengthวัดเป็นไบต์

ซึ่งเป็นเหตุผลที่ค่าแตกต่างในตัวอย่างการตั้งค่านี้ (ทั้งสองมีค่าเท่ากับ 1 GB)


7
ขอบคุณ sachin และฉันได้เพิ่มบางสิ่งเช่น <httpRuntime maxRequestLength = "32768" executionTimeout = "180" />
Surya sasidhar

11
maxAllowedContentLength ต้องมีหน่วยเป็นไบต์ไม่ใช่กิโลไบต์ดังนั้นตัวอย่างที่ให้มาจะไม่เทียบเท่า
Matthew Sharpe

33
ทั้ง IIS 7.5 และ VS RC 2012 IIS Express ฉันต้องตั้งค่าทั้งสองนี้ httpRuntime หนึ่งกำหนดค่าความยาวสูงสุดของ ASP.NET ในขณะที่ requestLimits จะกำหนดค่าความยาวสูงสุดของ IIS, stackoverflow.com/questions/6327452/และฟอรัม. iis.net/t/1169846.aspx
Despertar

18
มันคุ้มค่าที่จะชี้ให้เห็นอีกครั้งว่า maxAllowedContentLength มีหน่วยเป็นไบต์ไม่ใช่กิโลไบต์ ค่าทั้งสองไม่ควรเป็นหมายเลขเดียวกันเนื่องจากไม่ใช่หน่วยการวัดเดียวกัน
Pandincus

13
ตรวจสอบให้แน่ใจว่าคุณได้เพิ่มการตั้งค่านี้เป็นหลักWeb.configแทนที่จะเป็นหนึ่งในViewsโฟลเดอร์
Serj Sagan

553

ฉันไม่คิดว่ามันถูกกล่าวถึงที่นี่ แต่เพื่อให้การทำงานนี้ฉันต้องระบุค่าทั้งสองนี้ใน web.config:

ใน system.web

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

และใน system.webServer

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

สำคัญ : ค่าทั้งสองนี้ต้องตรงกัน ในกรณีนี้การอัปโหลดสูงสุดของฉันคือ 1024 เมกะไบต์

maxRequestLength มี1048576 KILOBYTESและ maxAllowedContentLength มี1073741824 ไบต์

ฉันรู้ว่ามันชัดเจน แต่มันง่ายที่จะมองข้าม


5
คำตอบนี้ใช้ได้ดีกับ IIS-Express (asp.net-
webpages

5
ใช่นี่คือคำตอบที่ได้ผลสำหรับฉันแทนคำตอบของ Sachin มันทำงานบน Azure ด้วย
Gautam Jain

5
นี่เป็นคำตอบที่ถูกต้องแน่นอน ... ทั้งสองรายการจะต้องปรากฏขึ้น ในกรณีของ MVC 3 อาจอยู่ในweb.configไฟล์รูทโปรเจ็กต์
Miguel Angelo

2
อีกสิ่งที่สำคัญคือ 'executionTimeout' ซึ่งคาร์ลกล่าวถึง
มูฮัมหมัดอามิน

26
ฉันต้องรวมสิ่งนี้กับบรรทัดที่มีอยู่สำหรับ: <httpRuntime targetFramework = "4.5" maxRequestLength = "1048576" executionTimeout = "3600" />
Ken Mc

195

อาจเป็นเรื่องน่าสังเกตว่าคุณอาจต้องการ จำกัด การเปลี่ยนแปลงนี้กับ URL ที่คุณคาดว่าจะใช้สำหรับการอัปโหลดแทนที่จะเป็นไซต์ทั้งหมดของคุณ

<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>

วิธีแก้ปัญหาที่ดีคิดเกี่ยวกับสถานที่ แต่มีเส้นทางสถานที่เมื่อทำงานกับ MVC (และทำงานกับเส้นทาง)
Luuk Krijnen

1
มันจะเป็น URL ที่สอดคล้องกับเส้นทางที่คุณตั้งค่าการดำเนินการอัปโหลดของคุณเป็น ในกรณีของฉันฉันมีตัวควบคุมเอกสารพร้อมการกระทำที่เรียกว่าอัปโหลดที่ฉันโพสต์แบบฟอร์มไปที่ ในกรณีของคุณมันจะเป็นสิ่งที่ url ต่อการกระทำของคุณจะเป็น
Nick Albrecht

สำหรับใครที่ชอบคำตอบนี้เห็นนี้
DontVoteMeDown

2
เพื่อนของคุณร็อค ขออภัยการลงคะแนนเล็ก ๆ น้อย ๆ ของฉันยังไม่เพียงพอ
Nicholas Petersen

1
สิ่งนี้จะทำงานกับ WebAPI ได้ถึงและรวมถึง MVC v5 เมื่อคุณกดปุ่ม ASP.NET Core ด้วย MVC Core แล้วมีตัวเลือกต่าง ๆ ที่คุณควรตั้งเป็น Kestrel
Nick Albrecht

44

และในกรณีที่มีใครบางคนกำลังมองหาวิธีที่จะจัดการกับข้อยกเว้นนี้และแสดงคำอธิบายที่มีความหมายกับผู้ใช้ (เช่น "คุณกำลังอัปโหลดไฟล์ที่มีขนาดใหญ่เกินไป"):

//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
    }
}

(จำเป็นต้องใช้ ASP.NET 4 หรือใหม่กว่า)


1
maxAllowedContentLength ควรสูงกว่า (maxRequestLength * 1024) สำหรับการสร้างข้อยกเว้น
Der_Meister

โพสต์นี้ให้สิ่งที่ฉันต้องการเพื่อเตือนผู้ใช้ แต่HttpContext.Current.ClearError()จำเป็นต้องอนุญาตให้Response.Redirect()ทำงานได้อย่างถูกต้อง ในแง่ของweb.configมันทำงานได้กับแอตทริบิวต์ของmaxRequestLength httpRuntime
nrod

การตรวจสอบขนาดไฟล์และข้อความที่ใช้งานง่ายสามารถทำได้ผ่าน JS ที่ระดับหน้าโดยใช้onchangeเหตุการณ์ที่ปุ่มอัปโหลดและเปรียบเทียบขนาดไฟล์อัปโหลดกับขีด จำกัด การอัปโหลดสูงสุด
อัลเฟรดวอลเลซ

29

ขนาดคำขอสูงสุดคือโดยค่าเริ่มต้น 4MB (4096 KB)

นี่คือคำอธิบายที่นี่ที่นี่

บทความข้างต้นยังอธิบายถึงวิธีการแก้ไขปัญหานี้ :)


4
ลิงก์กำลังนำฉันไปที่หน้าแรกของการสนับสนุนของ Microsoft
Bishop

1
อาจมีบางอย่างผิดปกติ ลิงค์เปลี่ยนเส้นทางที่นี่
gofr1

22

ถ้าคุณไม่สามารถอัปเดตการตั้งค่าไฟล์ HttpContext.Current.Request.GetBufferlessInputStream(true)แต่ควบคุมรหัสที่อัปโหลดไฟล์จัดการใช้

trueค่าสำหรับdisableMaxRequestLengthพารามิเตอร์บอกกรอบที่จะไม่สนใจข้อ จำกัด คำขอกำหนดค่า

สำหรับคำอธิบายโดยละเอียดไปที่https://msdn.microsoft.com/en-us/library/hh195568(v=vs.110).aspx


สุดยอดดังนั้นคำตอบยอดนิยมจะมีคะแนนอย่างไร> 1600 โหวตและ 5 ข้อนี้เท่านั้น? นี่ยอดเยี่ยมเพราะบ่อยครั้งมันเป็นเพียงการกระทำเดียวที่เราต้องการ ยิ่งกว่านั้นอย่ายุ่งกับการตั้งค่าอื่น ๆ ฯลฯ
Nicholas Petersen

นี่คือสิ่งที่ฉันกำลังมองหา
Chris Catignani

20

มีองค์ประกอบใน web.config เพื่อกำหนดขนาดสูงสุดของไฟล์ที่อัปโหลด:

<httpRuntime 
    maxRequestLength="1048576"
  />

11

เพื่อสรุปคำตอบทั้งหมดในที่เดียว:

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

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

กฎ:

  • ค่า maxRequestLength (แสดงเป็น kb) ต้องตรงกับ maxAllowedContentLength (แสดงเป็นไบต์)
  • ส่วนใหญ่เวลาส่วน system.web ของคุณอาจมี "httpRuntime" อยู่แล้ว ตั้ง targetFramework ของคุณเป็นเวอร์ชัน. net ที่คุณใช้

หมายเหตุ:

  • ค่าเริ่มต้นสำหรับ maxRequestLength คือ 4096 (4mb) ค่าสูงสุดคือ 2,147,483,647
  • ค่าเริ่มต้นสำหรับ maxAllowedContentLength คือ 30,000,000 (ประมาณ 30mb) ค่าสูงสุดคือ 4,294,967,295

ข้อมูลเพิ่มเติมMSDN


8

maxRequestLength (ความยาวเป็น KB) ที่นี่เช่น ฉันเลือก 1024 (1MB) maxAllowedContentLength (ความยาวเป็นไบต์) ควรเหมือนกับ maxRequestLength ของคุณ (1048576 ไบต์ = 1MB)

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

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

6

มันรบกวนฉันหลายวันเช่นกัน ฉันแก้ไขไฟล์ Web.config แต่มันไม่ทำงาน ปรากฎว่ามีไฟล์ Web.config สองไฟล์ในโครงการของฉันและฉันควรแก้ไขไฟล์หนึ่งในไดเรกทอรีROOTไม่ใช่ไฟล์อื่น หวังว่านี่จะเป็นประโยชน์


5

หากคุณมีคำขอไปยังแอปพลิเคชันในไซต์ตรวจสอบให้แน่ใจว่าคุณตั้งค่า maxRequestLength ในรูท web.config maxRequestLength ใน web.config ของแอปพลิเคชันดูเหมือนจะถูกละเว้น


ถ้าฉันสามารถลงคะแนนมากกว่านี้ฉันจะ นี่เป็นการสูญเสียวันในชีวิตของฉัน หากคุณมีแอปพลิเคชันย่อย dir เสมือนคุณต้องใส่httpRuntime maxRequestLength="###และrequestLimits maxAllowedContentLengthในการกำหนดค่าเว็บที่ระดับรูทไม่ใช่ในระดับแอปย่อย
nickvans

1

ฉันถูกสะดุดด้วยความจริงที่ว่าไฟล์ web.config ของเรามีหลายส่วน system.web: มันทำงานเมื่อฉันเพิ่ม <httpRuntime maxRequestLength = "1048576" /> ในส่วน system.web ที่ระดับการกำหนดค่า


1

ฉันต้องแก้ไขC:\Windows\System32\inetsrv\config\applicationHost.configไฟล์และเพิ่ม<requestLimits maxAllowedContentLength="1073741824" />ในส่วนท้ายของ ...

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

มาตรา.

ตามบทความ Microsoft Support นี้


web.config applicationHost.configจากโครงการของคุณเองควรแทนที่เหล่านี้ดังนั้นผมจึงไม่เห็นความจำเป็นในการปรับเปลี่ยน
bvgheluwe

-3

ฉันสามารถเพิ่มเพื่อกำหนดค่าเว็บที่ยังไม่ได้คอมไพล์

<system.web> 
  <httpRuntime maxRequestLength="1024" executionTimeout="3600" /> 
  <compilation debug="true"/> 
</system.web> 
<security> 
  <requestFiltering> 
    <requestLimits maxAllowedContentLength="1048576"/> 
  </requestFiltering> 
</security>

1
executionTimeoutแอตทริบิวต์มีอะไรจะทำอย่างไรกับสิ่งที่จะถามและไม่ไม่compilationแท็ก
Mathias Lykkegaard Lorenzen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.