2008-11-05 28 views
10

Tôi đã tìm thấy một vấn đề với ASP.NET mà tôi biết ít nhất đã stumped một người khác ra khỏi đó. Chúng tôi đã cố gắng sử dụng một HttpModule để xử lý các yêu cầu ký tự đại diện cho một ứng dụng web. Url được tạo là động và có thể có thể dài vài trăm ký tự. Thật không may có dường như là một hạn chế trong tệp aspnet_isapi.dll giới hạn độ dài của đường dẫn trong url tới MAX_PATH được mã hóa cứng tại 260 ký tự.ASP.NET url MAX_PATH limit

Có ai khác đã gặp phải vấn đề này và tìm cách vượt qua giới hạn này không? Tham số chuỗi truy vấn không phải là một tùy chọn.

Xin cảm ơn, Greg Ballard

+0

Các module được sửa đổi URL và tăng chiều dài của nó? – Will

Trả lời

3

Sự cố thực sự nằm trong Windows, chứ không phải ASP.NET. Windows đã đặt MAX_PATH ở mức 260 và khi IIS yêu cầu một tên tệp dài hơn, nó sẽ thất bại. Có thể bạn đã tìm thấy bài viết KBase này, nhưng đối với bất kỳ ai khác: http://support.microsoft.com/kb/q177665/. Phần Áp dụng cho: Phần này cho thấy hành vi này được mong đợi từ NT 3.51 đến Vista và Server 2003.

Đối với một giải pháp khác, tôi có tình huống tương tự, nhưng chúng tôi sẽ từ bỏ nỗ lực của chúng tôi để tránh tham số chuỗi truy vấn và đã làm nó.

2

Cảm ơn câu trả lời của bạn. Trong khi tôi không tìm thấy bài viết chính xác đó, tôi đã thấy tương tự. Tuy nhiên, đây không phải là một hạn chế trong IIS. Bạn có thể chuyển một đường dẫn dài hơn trong yêu cầu tới IIS và nó sẽ trả về đáp ứng đúng. Bạn có thể xác minh bằng cách thử với một trang html đơn giản. Vấn đề chỉ xảy ra khi sử dụng aspnet_isapi.dll để xử lý các yêu cầu. Ngay cả máy chủ gỡ lỗi tích hợp trong studio trực quan cũng có thể xử lý các đường dẫn dài hơn 260.

8

Đây là vấn đề đã biết với aspnet_isapi.dll và hiện không có cách giải quyết nào. Lý do bạn không thấy vấn đề này khi chạy trang web của bạn trong built-in Visual Studio Webserver (còn gọi là Cassini) là bởi vì đó là tất cả các mã được quản lý và không dựa trên aspnet_isapi.dll.

Điều này sẽ được giải quyết trong phiên bản tương lai của ASP.NET.

+5

(+1) 4 năm sau và vẫn không khắc phục được. – capdragon

+0

Vẫn chưa được khắc phục kể từ tháng 12 năm 2012. –

0

Bạn có thể sử dụng ISAPI viết lại URL chẳng hạn như IIRF để viết lại URL vào thứ gì đó mà aspnet_isapi có thể xử lý.

2

@Haacked:

Phil, bạn đề cập rằng đây là vấn đề với aspnet_isapi.dll. Điều này không có nghĩa là vấn đề này không nên tồn tại trong chế độ đường ống tích hợp IIS7?

Từ những gì tôi đã nghe, tuy nhiên, (http://forums.iis.net/t/1105360.aspx) nó vẫn hoạt động.

Tôi đang gặp phải vấn đề tương tự và cảm thấy bị hoop. Dường như định tuyến ASP.NET bị ảnh hưởng. Vì vậy, bất kỳ ứng dụng ASP.NET MVC nào phải có URL ngắn hơn 260, sau đó nó phải hoàn nguyên về truy vấn, có vẻ như hoàn thành 180!

(Xin lỗi vì câu trả lời-cho ý kiến ​​... không đủ đại diện cho bình luận nào :()

7

tôi đã kết thúc bằng cách sử dụng sau trong web.config để giải quyết vấn đề này bằng Mvc2 và .Net Framework 4.0

<httpRuntime maxUrlLength="1000" relaxedUrlToFileSystemMapping="true" /> 
+0

Cảm ơn bạn! Tôi yêu các bản sửa lỗi đơn giản – Levitikon

+2

Điều này không hiệu quả đối với tôi. –

2

Việc đăng ký UrlSegmentMaxLength trọng có thể được sử dụng để tăng mặc định của Windows tối đa 260 ký tự trên mỗi phân khúc Url trong yêu cầu HTTP đến:

  • chính: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters
  • Value: UrlSegmentMaxLength
  • Loại: REG_DWORD
  • Dữ liệu: (Chiều dài tối đa đoạn Url mới mong muốn của bạn, ví dụ: 4096)

Giá trị tối đa cho phép là 32766. Nếu giá trị lớn hơn được chỉ định, giá trị đó sẽ bị bỏ qua. (Credit: Juan Mendes)

Thông tin thêm về http.sys cài đặt: http://support.microsoft.com/kb/820129

Khởi động lại máy tính là cần thiết để thực hiện thay đổi thiết lập này có hiệu lực. (Credit: David Rettenbacher, Juan Mendes)

nguồn gốc cho câu trả lời này: https://stackoverflow.com/a/7817739/12484