Почему ValidateInput (False) не работает?

Я конвертирую приложение, которое я создал с помощью webforms в asp.net использование MVC framework vb.net - ... У меня проблема с одним из моих взглядов. Я получаю желтый экран смерти, говорящий: "потенциально опасная просьба.Значение формы было обнаружено от клиента", когда я отправляю свою форму. Я использую tinymce как мой RTE. Я установил на самом виде

ValidateRequest= "false"

Я знаю, что в MVC он не уважает его на вид из того, что я прочитал пока что. Поэтому я поставил его на действие контроллера. Я пробовал разные настройки:

<ValidateInput(False), AcceptVerbs(HttpVerbs.Post)> _

...и...

<AcceptVerbs(HttpVerbs.Post), ValidateInput(False)> _

...и вот так тоже...

<ValidateInput(False)> _
<AcceptVerbs(HttpVerbs.Post)> _

просто чтобы увидеть, если это имеет значение, но я все еще получаю желтый экран смерти. Я только хочу установить его для этого представления и конкретного действия в моем контроллере, к которому относится мой пост. Я что-то упускаю?

7 ответов


вы уверены, что действие контроллера, которое публикуется, является тем, на котором у вас есть атрибуты?


С asp.net 4, вам нужно будет настроить режим проверки в интернете.config как хорошо.

установить следующие как дитя <system.web> элемент:

<system.Web>
  ...
  <httpRuntime requestValidationMode="2.0"/>     

Asp.Net 4 устанавливает requestValidationMode в 4.0 по умолчанию, который говорит системе выполнить проверку запроса перед фазой BeginRequst HTTP-запроса. Проверка произойдет до того, как система достигнет атрибута action, сообщающего ей не проверять запрос, таким образом, отображая атрибут бесполезен. Установка requestValidationMode= " 2.0 " вернется к asp.net 2.0 поведение проверки запроса, позволяющее ValidateInput атрибут для работы, как ожидалось.


когда вы используете свои собственные привязки модели, которые реализуют IModelBinder интерфейс вы заметите, что эти пользовательские привязки модели всегда проверяют данные, независимо от каких-либо атрибутов. Вы можете добавить несколько строк кода, чтобы привязки пользовательских моделей уважали ValidateInput


вы можете попробовать получить доступ к полю, как Свойство HttpContext.Запрос.Непроверенный.Форма["Имя_поля"]


обратите внимание, что эти предложения не устранят проблемы, вызванные ошибкой, возникающей при использовании [ValidateInput(false)] в сочетании с FormCollection.

см.:ASP.NET MVC 3 ValidateRequest (false) не работает с FormCollection


Если вы используете входную модель и используете AllowHtml для нужного свойства, вы будете разблокированы.

public class InputModel
{
    [AllowHtml]
    public string HtmlInput { get; set; }
}

...
[ValidateInput(false)]
public async Task<ActionResult> ControllerMethod(InputModel model)
{
}

добавьте следующую строку кода:

GlobalFilters.Filters.Add(new ValidateInputAttribute(false));

к методу Application_Start ().