2013-05-16 15 views
15

Czy istnieje różnica między requestValidationMode = "4,5" a requestValidationMode = "2.0"? Mam aplikacji .NET 4.5, jest kontrola, która nie chce, aby potwierdzić, ponieważ użytkownicy mogą wprowadzać tagi html w:requestValidationMode 4.5 vs 2.0

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

w moim web.config mam:

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

początkowo wstawiłem requestValidationMode = "4.5", ale to nie zadziałało, nadal otrzymywałbym błąd dotyczący tagów - "Potencjalnie niebezpieczna wartość Request.Form została wykryta przez klienta ...", jak tylko prześle Formularz. Jeśli jednak ustawię go na requestValidationMode = "2.0", to działa, jestem w stanie uderzyć w PageLoad i zakodować wartość z tego pola.

Odpowiedz

17

Tak, istnieje różnica między tymi dwoma. Każda klasa requestValidationMode określona jako 4.0 lub wyższa użyje metody 4.0, a każda metoda requestValidationMode określona jako poniżej 4.0 użyje metody 2.0. Poniżej znajduje się opis dwóch:

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

4,0 (ustawienie domyślne). Obiekt HttpRequest wewnętrznie ustawia flagę, która wskazuje, że sprawdzanie poprawności żądania powinno być uruchamiane za każdym razem, gdy uzyskuje się dostęp do danych żądania HTTP. Gwarantuje to, że sprawdzanie poprawności żądania zostanie uruchomione, zanim dane takie jak pliki cookie i adresy URL będą dostępne podczas żądania. Ustawienia sprawdzania poprawności elementu strony (jeśli istnieją) w pliku konfiguracyjnym lub dyrektywy @ Page na pojedynczej stronie są ignorowane.

2.0. Weryfikacja żądania jest włączona tylko dla stron, a nie dla wszystkich żądań HTTP. Ponadto ustawienia sprawdzania poprawności elementu strony (jeśli istnieją) w pliku konfiguracyjnym lub dyrektywy @ Page na jednej stronie służą do określania żądań stron do sprawdzenia poprawności.

Na marginesie: Istnieją inne rozwiązania, ponieważ używasz asp.net 4.5 możesz chcieć sprawdzić to na poziomie kontrolnym, w ten sposób możesz pozostawić właściwość requestValidationMode w web.config na 4.5 i zmieniaj tylko na kontrole, które tego potrzebują. http://msdn.microsoft.com/en-us/library/system.web.ui.control.validaterequestmode.aspx

+1

wierzę, że to problem mam, używam .net 4.5, miałem początkowo ustawić wpis w webconfig do requestValidationMode = „4.5” i mieć ValidateRequestMode ustawić tylko na poziomie sterowania, tylko jedna kontrola tego potrzebuje, ale nie działała. Zmiana na requestValidationMode = "2.0" i to działa. – Paritosh

+0

Finał nie jest bardzo pomocny. Mam pole tekstowe, w którym chcę zezwolić na dowolną zawartość. Używam go do wypróbowania kilku elementów od początku każdego wiersza. Nic nigdy nie zostanie zwrócone. Był pita, aby dowiedzieć się, jak uniknąć ustawienia wszystkich walidacji na 2 ... – Lucas

8

Zgadzam się z odpowiedzią firmy Chris_dotnet.

Jednak chciałbym dodać niewielką marginesie:

W pliku web.config, załączyć tag requestValidationMode="2.0" pod lokalizacji tagu więc tylko pozwalają specyficzna strona mieć to „zwolnienie” aby pominąć sprawdzanie poprawności.

<location path="YourPage.aspx"> 
    <system.web> 
    <httpRuntime requestValidationMode="2.0"/> 
    </system.web> 
</location>