Cách định cấu hình web.config để cho phép các yêu cầu có độ dài bất kỳ


137

Tôi đang xây dựng một trang web trong đó tôi muốn tạo một phía máy khách tệp từ giá trị của một phần tử textarea.

Tôi có mã tại chỗ để làm điều này, nhưng tôi đang gặp lỗi này

Lỗi HTTP 404.15 - Không tìm thấy Mô-đun lọc yêu cầu được định cấu hình để từ chối yêu cầu trong đó chuỗi truy vấn quá dài.

Có cách nào để ghi đè lên điều này để tôi có thể xử lý các yêu cầu có kích thước bất kỳ không?

Nếu không, có cách nào để tạo tệp phía máy khách mà không sử dụng đối tượng filesystem / active x không?

cảm ơn


8
Điều bạn muốn xem xét là mặc dù độ dài chuỗi truy vấn có thể được định cấu hình cho IIS hoặc ứng dụng của bạn, nhưng có một tiêu chuẩn HTTP cho độ dài URL. Vì bạn đang sử dụng chuỗi truy vấn nên bạn chuyển các giá trị như một phần của URL. Độ dài ký tự URL tối đa là 2000 ký tự. Nếu các giá trị của bạn sẽ là các chuỗi dài, tốt nhất là POST các giá trị thay vì chuyển chúng trong chuỗi truy vấn.
Jeff LaFay

2
Đồng ý với Jlafay. Đó là một cách thực hành tốt nhất để POST các giá trị khi bạn có nhiều hơn 2-3 tham số đơn giản. và khi bạn sử dụng chuỗi truy vấn, hãy chắc chắn mã hóa chúng.
Jack

Câu trả lời:


242

Thêm phần sau vào web.config:

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

Xem:

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

Cập nhật để phản ánh ý kiến.

ElementLimits Element cho requestFiltering [Lược đồ cài đặt IIS]

Bạn cũng có thể phải thêm các mục sau vào web.config

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

Xem: Phần tử httpR.78 (Lược đồ cài đặt ASP.NET)

Tất nhiên các số (32768 và 65536) trong cài đặt cấu hình ở trên chỉ là ví dụ. Bạn không phải sử dụng những giá trị chính xác đó.


24
Điều đó thôi là không đủ với tôi. Tôi cũng đã phải thêm phần này vào phần system.web: <httpR.78 maxQueryStringL wavel = "8192" />
Rob Sedgwick

2
nnn là độ dài chuỗi tối đa mà bạn muốn cho phép, ví dụ 32768
Matt Varblow 20/03/2015


Tôi đã thử từng cái một, đặt nút bảo mật trong system.webServer, sau đó loại bỏ và chỉ cần thêm các thuộc tính vào nút httpR.78. Tôi chắc chắn cần cả hai để làm việc. Cảm ơn nhiều!
David Gunderson

2
Lưu ý: thẻ <httpR.78> nằm dưới <system.web> : <system.web> <httpR.78 maxQueryStringLạng = "32768" maxUrlLạng = "65536" /> </ system.web>
LePatay

33

Trong trường hợp của tôi (ứng dụng Visual Studio 2012 / IIS Express / ASP.NET MVC 4 / .Net Framework 4.5), thứ thực sự hoạt động sau 30 phút dùng thử và lỗi đã đặt thuộc maxQueryStringLengthtính trong <httpRuntime>thẻ:

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

maxQueryStringLengthmặc định 2048.

Thêm về nó ở đây:

Mở rộng phạm vi URL cho phép


Tôi đã thử cài đặt nó <system.webServer>như @MattVarblow gợi ý, nhưng nó không hoạt động ... và điều này là do tôi đang sử dụng IIS Express (dựa trên IIS 8) trên máy dev của tôi với Windows 8.

Khi tôi triển khai ứng dụng của mình vào môi trường sản xuất (Windows Server 2008 R2 với IIS 7), IE 10 bắt đầu trả về lỗi 404 trong các yêu cầu AJAX với chuỗi truy vấn dài. Sau đó, tôi nghĩ rằng vấn đề có liên quan đến chuỗi truy vấn và đã thử câu trả lời của @ MattVarblow. Nó chỉ hoạt động trên IIS 7. :)


2
Đối với tôi, chính enable = "true" đã biến điều kỳ diệu xảy ra :)
Johann Combrink

6

Một cái gì đó khác để kiểm tra: nếu trang web của bạn đang sử dụng MVC, điều này có thể xảy ra nếu bạn thêm [Ủy quyền] vào lớp trình điều khiển đăng nhập. Nó không thể truy cập phương thức đăng nhập vì nó không được ủy quyền nên nó chuyển hướng đến phương thức đăng nhập -> boom.


Cảm ơn! Tôi gặp phải sự cố này vì tôi đã chuyển Menu / Điều hướng sang chế độ xem một phần và Trình điều khiển khác không cho phép kết nối ẩn danh.
Westerlund.io

Một trường hợp khác trong đó thông báo lỗi, mặc dù đúng, không liên quan đến vấn đề thực tế.
Steve Smith

1
Ngoài ra, hãy kiểm tra các thuộc tính của dự án vì có thể là Xác thực Windows là Kích hoạt miễn phí và Xác thực ẩn danh là Vô hiệu hóa. Vui lòng kiểm tra bài viết chi tiết này - Lỗi (Visual Studio 2013, MVC5): Mô-đun lọc yêu cầu được định cấu hình để từ chối yêu cầu trong đó chuỗi truy vấn quá dài
fujiFX

5

Nếu bạn gặp phải vấn đề này khi chạy máy chủ web IIS 8.5, bạn có thể sử dụng phương pháp sau.

Đầu tiên, tìm mô-đun "Yêu cầu lọc" trong trang IIS bạn đang làm việc, sau đó nhấp đúp vào nó ...

nhập mô tả hình ảnh ở đây

Tiếp theo, bạn cần nhấp chuột phải vào vùng màu trắng hiển thị bên dưới, sau đó nhấp vào tùy chọn menu ngữ cảnh có tên "Chỉnh sửa cài đặt tính năng" .

nhập mô tả hình ảnh ở đây

Sau đó, điều cuối cùng cần làm là thay đổi giá trị "Chuỗi truy vấn tối đa (byte)" từ năm 2048 thành thứ gì đó phù hợp hơn, chẳng hạn như 5000 cho nhu cầu của bạn.

nhập mô tả hình ảnh ở đây


Cảm ơn bạn, đây là giải pháp đơn giản và hiệu quả nhất đối với tôi
Afif Zafri

Cảm ơn bạn đời !!!!!
Noobie

0

Tôi gặp vấn đề tương tự khi cố gắng triển khai Ứng dụng web ASP lên IIS 8. Để khắc phục, tôi đã làm như Matt và Leniel đã đề xuất ở trên. Nhưng cũng phải định cấu hình cài đặt Xác thực trang web của tôi để bật Xác thực ẩn danh. Và điều đó đã làm việc cho tôi.


0

Tôi đã phải thêm [AllowAnonymous] vào các chức năng ActionResult trong trang đăng nhập của mình vì người dùng chưa được xác thực.


0

Nếu trang web của bạn đang sử dụng xác thực, nhưng bạn không có phương thức xác thực chính xác được thiết lập trong IIS (ví dụ: Cơ bản, Biểu mẫu, v.v.) thì trình duyệt sẽ bị kẹt trong vòng lặp chuyển hướng. Điều này làm cho url chuyển hướng ngày càng dài hơn cho đến khi nó phát nổ.


0

Nó cũng sẽ tạo ra lỗi khi bạn truyền chuỗi lớn trong tham số cuộc gọi ajax.

do đó, sử dụng loại bài đăng trong ajax sẽ giải quyết vấn đề của bạn 100% và không cần đặt độ dài trong web.config.

// var UserId = mảng 1000 userids

$ .ajax (}


-1

Lỗi HTTP 404.15 - Không tìm thấy Mô-đun lọc yêu cầu được định cấu hình để từ chối yêu cầu trong đó chuỗi truy vấn quá dài.

Để giải quyết vấn đề này, hãy kiểm tra mã nguồn xem Formthẻ có thuộc tính methodlà trạng thái get / set hay không.

Nếu vậy, methodtài sản nên được loại bỏ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.