2013-05-16 17 views
15

requestValidationMode = "4.5" ile requestValidationMode = "2.0" arasında bir fark var mı? Kullanıcıların html etiketleri girebilir gibi ben doğrulamak istemiyorum bir kontrol var, bir .net 4.5 uygulama var: benim web.config'derequestValidationMode 4.5 vs 2.0

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

i var:

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

başlangıçta requestValidationMode = "4.5" yazdım ama bu işe yaramadı, hala etiketlerle ilgili hatayı alacağım - "Potansiyel olarak tehlikeli bir Request.Form değeri müşteriden tespit edildi ..." form. Ancak, requestValidationMode = "2.0" olarak ayarlıyorum eğer çalışırsa, PageLoad'ı vurabilir ve bu alandaki değeri kodlayabilirim.

cevap

17

Evet, ikisi arasında bir fark var. 4.0 veya üstü olarak belirtilen requestValidationMode istekleri 4.0 yolunu kullanır ve 4.0'ın altında belirtilen herhangi bir requestValidationMode 2.0 yolunu kullanır.

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

4,0 (varsayılan): Aşağıda ikisinin bir açıklamasıdır. HttpRequest nesnesi, herhangi bir HTTP istek verilerine erişildiğinde istek doğrulama işleminin tetiklenmesi gerektiğini gösteren bir bayrağı ayarlar. Bu, istek doğrulama işleminin, istek sırasında çerezler ve URL'ler gibi verilere erişilmeden önce tetiklendiğini garanti eder. Sayfa dosyasındaki (varsa) konfigürasyon dosyasında veya bağımsız bir sayfadaki @ Sayfa yönergesinin istek doğrulama ayarları dikkate alınmaz.

2.0. İstek doğrulama, tüm HTTP istekleri için değil, yalnızca sayfalar için etkinleştirilir. Ek olarak, hangi sayfa isteklerinin doğrulanacağını belirlemek için, yapılandırma dosyasında veya bağımsız bir sayfadaki @ Sayfa yönergesindeki sayfa öğesinin istek doğrulama ayarları kullanılır.

Bir not olarak: Asp.net 4.5 kullandığınız için başka çözümler de vardır, her kontrol seviyesinde doğrulama yapmak isteyebilirsiniz, bu şekilde requestValidationMode özelliğini web.config dosyasında 4.5 olarak bırakabilirsiniz. ve sadece onu ihtiyacı olan kontrollerde değiştir. http://msdn.microsoft.com/en-us/library/system.web.ui.control.validaterequestmode.aspx

+1

Ben o ben, ben .net 4.5, Başlangıçta = "4.5" requestValidationMode için WebConfig girişi ayarlayabilir ve ValidateRequestMode sadece kontrol düzeyinde ayarlanan var olan kullanıyorum yaşadığım sorun inanmak Sadece bir kontrolün ihtiyacı var, ama işe yaramadı. RequestValidationMode = "2.0" olarak değiştiriliyor ve çalışıyor. – Paritosh

+0

Son değil, son derece yararlıdır. Herhangi bir içeriğe izin vermek istediğim bir metin kutum var. Her satırın başlangıcından birkaç parçayı ayrıştırmak için kullanıyorum. Hiçbir şey geri alınamaz. Tüm validasyonun 2'ye ayarlanmasını önlemek için bir pide oldu ... – Lucas

8

Chris_dotnet'in yanıtına katılıyorum. Yalnızca belirli bir sayfa bu "feragat" için izin böylece yeri etiketi altında requestValidationMode="2.0" etiketi, web.config dosyasında

içine:

Ancak, küçük bir yan not eklemek istiyorum Doğrulamayı atlamak için

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