2013-05-16 20 views
15

Có sự khác biệt nào giữa requestValidationMode = "4.5" và requestValidationMode = "2.0" không? Tôi có một ứng dụng .net 4.5, có một điều khiển mà tôi không muốn để xác nhận, như người dùng có thể nhập các thẻ html trong:requestValidationMode 4.5 vs 2.0

<asp:TextBox ID="txtTitle" runat="server" ValidateRequestMode="Disabled" /> 

trong web.config của tôi tôi có:

<compilation debug="true" strict="false" explicit="true" targetFramework="4.5">...</compilation> 
<httpRuntime targetFramework="4.5" requestValidationMode="2.0" /> 

ban đầu tôi đã đặt requestValidationMode = "4.5" nhưng điều đó không hoạt động, tôi vẫn sẽ nhận được lỗi về các thẻ - "Giá trị Request.Form nguy hiểm tiềm ẩn đã được phát hiện từ ứng dụng khách ..." ngay sau khi gửi hình thức. Tuy nhiên nếu tôi đặt nó để requestValidationMode = "2.0" nó hoạt động, tôi có thể nhấn PageLoad và mã hóa giá trị từ trường đó.

Trả lời

17

Có sự khác biệt giữa hai loại. Bất cứ điều gì requestValidationMode quy định là 4.0 hoặc cao hơn sẽ sử dụng cách 4.0 và bất kỳ requestValidationMode quy định như dưới đây 4.0 sẽ sử dụng cách 2.0. Dưới đây là một mô tả của hai:

http://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.requestvalidationmode.aspx

4,0 (mặc định). Đối tượng HttpRequest trong nội bộ thiết lập một cờ cho biết rằng xác thực yêu cầu sẽ được kích hoạt bất cứ khi nào bất kỳ dữ liệu yêu cầu HTTP nào được truy cập. Điều này đảm bảo rằng xác thực yêu cầu được kích hoạt trước khi dữ liệu như cookie và URL được truy cập trong khi yêu cầu. Cài đặt xác thực yêu cầu của phần tử trang (nếu có) trong tệp cấu hình hoặc chỉ thị @ Trang trong một trang riêng lẻ được bỏ qua.

2.0. Yêu cầu xác thực chỉ được bật cho các trang, không phải cho tất cả các yêu cầu HTTP. Ngoài ra, cài đặt xác thực yêu cầu của phần tử trang (nếu có) trong tệp cấu hình hoặc chỉ thị @ Trang trong một trang riêng lẻ được sử dụng để xác định trang nào yêu cầu xác thực.

Lưu ý: Có các giải pháp khác, vì bạn đang sử dụng asp.net 4.5, bạn có thể muốn xem nó để xác thực trên mỗi mức điều khiển, theo cách đó bạn có thể rời khỏi thuộc tính requestValidationMode trong web.config tại 4.5 và chỉ thay đổi nó trên các điều khiển cần nó. http://msdn.microsoft.com/en-us/library/system.web.ui.control.validaterequestmode.aspx

+1

Tôi tin rằng đó là vấn đề tôi đang gặp phải, tôi đang sử dụng .net 4.5, ban đầu tôi đã đặt mục nhập trong webconfig thành requestValidationMode = "4.5" và chỉ đặt ValidateRequestMode ở cấp điều khiển, chỉ là một điều khiển cần nó, nhưng nó không hoạt động. Thay đổi nó thành requestValidationMode = "2.0" và nó hoạt động. – Paritosh

+0

Cuối cùng không phải là cực kỳ hữu ích. Tôi có một hộp văn bản mà tôi muốn cho phép bất kỳ nội dung nào. Tôi sử dụng nó để phân tích một vài đoạn từ đầu mỗi dòng. Không có gì được trả lại. Là một pita để tìm cách tránh đặt tất cả xác thực thành 2 ... – Lucas

8

Tôi đồng ý với câu trả lời của Chris_dotnet.

Tuy nhiên, tôi muốn thêm một mặt lưu ý nhỏ:

Trong file web.config của bạn, kèm theo thẻ requestValidationMode="2.0" dưới vị trí thẻ vì vậy bạn chỉ cho phép một trang cụ thể để có điều này "khước từ" để bỏ qua xác thực.

<location path="YourPage.aspx"> 
    <system.web> 
    <httpRuntime requestValidationMode="2.0"/> 
    </system.web> 
</location> 
Các vấn đề liên quan