วิธีกำหนดค่า web.config เพื่อให้สามารถทำการร้องขอได้ทุกความยาว


138

ฉันกำลังสร้างเว็บไซต์ที่ฉันต้องการสร้างฝั่งไคลเอ็นต์ไฟล์จากค่าขององค์ประกอบ textarea

ฉันมีรหัสในการทำเช่นนี้ แต่ฉันได้รับข้อผิดพลาดนี้

HTTP Error 404.15 - ไม่พบโมดูลการกรองคำขอถูกกำหนดค่าให้ปฏิเสธคำขอที่สตริงการสืบค้นยาวเกินไป

มีวิธีการแทนที่สิ่งนี้หรือไม่เพื่อให้ฉันสามารถดำเนินการตามคำขอทุกขนาดได้

ถ้าไม่มีมีวิธีสร้างไฟล์ไคลเอนต์โดยไม่ใช้วัตถุ filesystem / active x หรือไม่?

ขอบคุณ


8
สิ่งที่คุณต้องการพิจารณาคือแม้ว่าความยาวสตริงข้อความค้นหาอาจกำหนดค่าได้สำหรับ IIS หรือแอปพลิเคชันของคุณ แต่ก็มีมาตรฐาน HTTP สำหรับความยาว URL เนื่องจากคุณใช้สตริงข้อความค้นหาคุณจึงส่งค่าเป็นส่วนหนึ่งของ URL ความยาวอักขระสูงสุดของ URL คือ 2,000 ตัวอักษร ถ้าค่าของคุณเป็นสตริงที่มีความยาวมันจะเป็นการดีที่สุดที่จะโพสต์ค่าแทนที่จะส่งค่าเหล่านั้นในสตริงการสืบค้น
Jeff LaFay

2
เห็นด้วยกับ Jlafay เป็นวิธีปฏิบัติที่ดีที่สุดในการโพสต์ค่าเมื่อคุณมีพารามิเตอร์ง่าย ๆ มากกว่า 2-3 พารามิเตอร์ และเมื่อคุณใช้สตริงแบบสอบถามให้แน่ใจว่าได้เข้ารหัสพวกเขา
แจ็ค

คำตอบ:


243

เพิ่มสิ่งต่อไปนี้ในเว็บของคุณ config:

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxQueryString="32768"/>
    </requestFiltering>
  </security>
</system.webServer>

ดู:

http://www.iis.net/ConfigReference/system.webServer/security/requestFiltering/requestLimits

อัปเดตเพื่อแสดงความคิดเห็น

RequestLimits Element สำหรับ requestFiltering [โครงสร้างการตั้งค่า IIS]

คุณอาจต้องเพิ่มสิ่งต่อไปนี้ใน web.config เช่นกัน

<system.web>
    <httpRuntime maxQueryStringLength="32768" maxUrlLength="65536"/>
</system.web>

ดู: องค์ประกอบ httpRuntime (โครงสร้างการตั้งค่า ASP.NET)

แน่นอนว่าตัวเลข (32768 และ 65536) ในการตั้งค่าคอนฟิกด้านบนเป็นเพียงตัวอย่างเท่านั้น คุณไม่จำเป็นต้องใช้ค่าที่แน่นอนเหล่านั้น


24
เพียงอย่างเดียวนั้นไม่เพียงพอสำหรับฉัน ฉันต้องเพิ่มไปยังส่วน system.web: <httpRuntime maxQueryStringLength = "8192" />
Rob Sedgwick

2
nnn คือความยาวสตริงสูงสุดที่คุณต้องการอนุญาตเช่น 32768
Matt Varblow


ฉันลองแต่ละอันแยกกันตั้งค่าโหนดความปลอดภัยภายใต้ system.webServer จากนั้นลบออกและเพิ่งเพิ่มแอ็ตทริบิวต์ไปยังโหนด httpRuntime ฉันต้องการทั้งสองอย่างแน่นอนในการทำงาน ขอบคุณมาก!
David Gunderson

2
หมายเหตุ: แท็ก<httpRuntime>อยู่ภายใต้<system.web> : <system.web> <httpRuntime maxQueryStringLength = "32768" maxUrlLength = "65536" /> </ system.web>
LePatay

33

ในกรณีของฉัน (Visual Studio 2012 / IIS Express / ASP.NET MVC 4 แอพ / .Net Framework 4.5) สิ่งที่ใช้งานได้จริงหลังจากการลองผิดลองถูก 30 นาทีและตั้งค่าmaxQueryStringLengthคุณสมบัติใน<httpRuntime>แท็ก:

<httpRuntime targetFramework="4.5" maxQueryStringLength="10240" enable="true" />

maxQueryStringLength2048เริ่มต้นที่

เพิ่มเติมเกี่ยวกับที่นี่:

การขยายช่วงของ URL ที่อนุญาต


ฉันลองตั้ง<system.webServer>เป็น@MattVarblowแนะนำ แต่มันไม่ทำงาน ... และนี่เป็นเพราะฉันใช้ IIS Express (ตาม IIS 8) บนเครื่อง dev ของฉันกับ Windows 8

เมื่อฉันปรับใช้แอปของฉันกับสภาพแวดล้อมการผลิต (Windows Server 2008 R2 กับ IIS 7), IE 10 เริ่มส่งคืนข้อผิดพลาด 404 ในคำขอ AJAX ที่มีสตริงข้อความค้นหาที่ยาว แล้วฉันคิดว่าปัญหาเกี่ยวข้องกับสตริงการสืบค้นและลองคำตอบของ @ MattVarblow มันใช้งานได้กับ IIS 7 :)


2
สำหรับฉันมันเป็น enable = "true" ที่ทำให้มายากลเกิดขึ้น :)
โยฮันน์ Combrink

6

สิ่งอื่นที่ควรตรวจสอบ: หากเว็บไซต์ของคุณใช้ MVC อาจเกิดขึ้นได้หากคุณเพิ่ม [อนุญาต] ในคลาสตัวควบคุมการเข้าสู่ระบบของคุณ ไม่สามารถเข้าถึงวิธีการเข้าสู่ระบบได้เนื่องจากไม่ได้รับอนุญาตจึงเปลี่ยนเส้นทางไปยังวิธีการเข้าสู่ระบบ -> boom


ขอบคุณ! ฉันประสบปัญหานี้เพราะฉันย้ายเมนู / การนำทางไปยังมุมมองบางส่วนและคอนโทรลเลอร์อื่นซึ่งไม่อนุญาตการเชื่อมต่อที่ไม่ระบุชื่อ
Westerlund.io

อีกกรณีหนึ่งที่ข้อความแสดงข้อผิดพลาดแม้ว่าเป็นจริงจะไม่มีความเกี่ยวข้องกับปัญหาจริง
Steve Smith

1
ตรวจสอบคุณสมบัติของโครงการด้วยเพราะอาจเป็นไปได้ว่า Windows Authentication เป็น“ Enabled” และ Authentication Anonymous นั้นถูกปิดใช้งาน” โปรดตรวจสอบบทความโดยละเอียด - ข้อผิดพลาด (Visual Studio 2013, MVC5): โมดูลการกรองคำขอถูกกำหนดค่าให้ปฏิเสธคำขอที่สตริงการสืบค้นยาวเกินไป
fujiFX

5

หากคุณพบปัญหานี้เมื่อใช้งานเว็บเซิร์ฟเวอร์ IIS 8.5 คุณสามารถใช้วิธีการต่อไปนี้

ก่อนอื่นค้นหาโมดูล"การกรองการร้องขอ"ในไซต์ IIS ที่คุณกำลังทำงานอยู่จากนั้นดับเบิลคลิกที่มัน ...

ป้อนคำอธิบายรูปภาพที่นี่

ถัดไปคุณจะต้องคลิกขวาในพื้นที่สีขาวที่แสดงด้านล่างแล้วคลิกตัวเลือกเมนูบริบทที่เรียกว่า"การตั้งค่าคุณสมบัติแก้ไข"

ป้อนคำอธิบายรูปภาพที่นี่

จากนั้นสิ่งสุดท้ายที่ต้องทำคือเปลี่ยนค่า"สตริงการสืบค้นสูงสุด (ไบต์)"จาก2048เป็นสิ่งที่เหมาะสมกว่าเช่น5000สำหรับความต้องการของคุณ

ป้อนคำอธิบายรูปภาพที่นี่


ขอบคุณนี่เป็นวิธีแก้ปัญหาที่ง่ายและทำงานได้ดีที่สุดสำหรับฉัน
Afif Zafri

ขอบคุณเพื่อน !!!!!
Noobie

0

ฉันมีปัญหาคล้ายกันที่พยายามปรับใช้ ASP Web Application กับ IIS 8 เพื่อแก้ไขฉันทำตามที่ Matt และ Leniel แนะนำไว้ข้างต้น แต่ยังต้องกำหนดการตั้งค่าการรับรองความถูกต้องของเว็บไซต์ของฉันเพื่อเปิดใช้งานการพิสูจน์ตัวตนแบบไม่ระบุชื่อ และนั่นก็ใช้ได้กับฉัน


0

ฉันต้องเพิ่ม [AllowAnonymous] ลงในฟังก์ชั่น ActionResult ในหน้าเข้าสู่ระบบเพราะผู้ใช้ยังไม่ได้รับการรับรองความถูกต้อง


0

หากเว็บไซต์ของคุณใช้การตรวจสอบความถูกต้อง แต่คุณไม่ได้ตั้งค่าวิธีการรับรองความถูกต้องใน IIS (เช่นพื้นฐานฟอร์มเป็นต้น) เบราว์เซอร์จะติดอยู่ในลูปการเปลี่ยนเส้นทาง สิ่งนี้ทำให้ URL การเปลี่ยนเส้นทางยาวขึ้นเรื่อย ๆ จนกว่ามันจะระเบิด


0

มันจะสร้างข้อผิดพลาดเมื่อคุณส่งสตริงขนาดใหญ่ในพารามิเตอร์การโทร ajax

ดังนั้นสำหรับการใช้พิมพ์โพสต์ในอาแจ็กซ์จะแก้ไขปัญหาของคุณ 100% และไม่จำเป็นต้องตั้งความยาวใน web.config

// var UserId = อาร์เรย์ 1,000 userids

$ .ajax ({global: false, url: SitePath + "/ ผู้ใช้ / getAussizzMembersData", "data": {UserIds: UserId}, "type": "POST", "dataType": "JSON"}}


-1

HTTP Error 404.15 - ไม่พบโมดูลการกรองคำขอถูกกำหนดค่าให้ปฏิเสธคำขอที่สตริงการสืบค้นยาวเกินไป

เมื่อต้องการแก้ไขปัญหานี้ให้ตรวจสอบในซอร์สโค้ดว่าFormแท็กมีคุณสมบัติmethodคือสถานะ get / set

ถ้าเป็นเช่นนั้นmethodควรลบคุณสมบัติ

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