Подтвердить что ты не робот

RequestValidationMode 4.5 vs 2.0

Есть ли разница между requestValidationMode = "4.5" и requestValidationMode = "2.0"? У меня есть приложение .net 4.5, есть элемент управления, который я не хочу проверять, так как пользователи могут вводить теги html в:

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

в моем web.config у меня есть:

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

изначально я поместил requestValidationMode = "4.5", но это не сработало, я все равно получаю ошибку об этих тегах - "Потенциально опасное значение Request.Form было обнаружено у клиента...", как только отправьте форму. Однако, если я установил его для запросаValidationMode = "2.0", он работает, я могу нажать на страницу и загрузить значение из этого поля.

4b9b3361

Ответ 1

Да, есть разница между ними. Anything requestValidationMode, указанный как 4.0 или выше, будет использовать путь 4.0, и любой requestValidationMode, указанный ниже 4.0, будет использовать способ 2.0. Ниже приведено описание двух:

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

4.0 (по умолчанию). Объект HttpRequest внутренне устанавливает флаг, который указывает, что проверка запроса должна запускаться всякий раз, когда к ней поступают любые данные запроса HTTP. Это гарантирует, что проверка запроса инициируется до того, как во время запроса будут доступны такие данные, как куки и URL-адреса. Параметры проверки запроса элемента страниц (если они есть) в файле конфигурации или директивы @Страница на отдельной странице игнорируются.

2,0. Проверка запроса разрешена только для страниц, а не для всех HTTP-запросов. Кроме того, параметры проверки запроса элемента страницы (если есть) в файле конфигурации или директивы @Страница на отдельной странице используются для определения того, какие запросы страницы проверяются.

В качестве примечания: Существуют и другие решения, так как вы используете asp.net 4.5, вы можете посмотреть его на проверку на уровне управления, таким образом вы можете оставить свойство requestValidationMode в файле web.config на уровне 4.5 и только измените его на элементы управления, которые в этом нуждаются. http://msdn.microsoft.com/en-us/library/system.web.ui.control.validaterequestmode.aspx

Ответ 2

Я согласен с ответом Chris_dotnet.

Однако я хотел бы добавить небольшое примечание:

В вашем файле web.config приложите тег requestValidationMode="2.0" в тег location, чтобы разрешить только конкретную страницу иметь этот "отказ", чтобы пропустить проверку.

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