Как отключить валидацию в ASP.net MVC2, если параметром действия является модель - PullRequest
0 голосов
/ 28 июня 2010

В ASP.net MVC 2, если параметром действия является модель, как отключить проверку для отклонения исключения, например «Обнаружено потенциально опасное значение Request.Form от клиента (Post.Title =" Название").'?

Например, в MvcMusicStore (который является официальной демонстрацией ASP.net MVC2) следующий код отвечает за создание нового альбома.И Title является его свойством.

    [HttpPost]
    public ActionResult Create(Album album)
    {
        ...
    }

Но если я добавлю какой-нибудь чувствительный код в текстовое поле Title , например " Title", вышеупомянутое исключение будет брошено.Я попытался добавить [ValidateInput (false)] к этому действию и ValidateRequest = "false" к коду представления, ни один из них не работает.

Кто-нибудь может помочь с этим?

Обновление: поскольку я использую Visual Studio 2010 и ASP.net 4.0, все эти решения не будут работать, если я не добавлю:

<httpRuntime requestValidationMode="2.0" />

на web.config.Пожалуйста, обратитесь: https://stackoverflow.com/questions/2019843/a-potentially-dangerous-request-form-value-in-mvc-2-asp-net-4-0, и http://www.asp.net/learn/whitepapers/aspnet4/breaking-changes#_TOC4.

Тогда возникнет новая проблема.Если нам нужно вернуться к использованию режима проверки запросов 2.0, зачем Microsoft добавляет эту новую функцию в ASP.net 4.0?Есть ли способ обойти это исключение, не возвращаясь в режим 2.0?

Ответы [ 3 ]

1 голос
/ 28 июня 2010

Если вы посмотрите описание под сообщением об ошибке, которое вы описали, вы найдете следующее решение:

... Чтобы разрешить страницам переопределять параметры проверки запросов приложения, установите для атрибута requestValidationMode в разделе конфигурации httpRuntime значение requestValidationMode = "2.0". Пример: <httpRuntime requestValidationMode="2.0" />. После установки этого значения вы можете отключить проверку запроса, установив validateRequest = "false" в директиве Page или в разделе конфигурации <pages>. Тем не менее, настоятельно рекомендуется, чтобы ваше приложение явно проверило все входные данные в этом случае. Для получения дополнительной информации см. http://go.microsoft.com/fwlink/?LinkId=153133.

Вы упомянули, что пытались добавить атрибут validateRequest, но также пытались ли добавить requestValidationMode = "2.0" в раздел httpRuntime в вашем файле web.config? Это могло бы помочь.

0 голосов
/ 21 марта 2011

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

0 голосов
/ 28 июня 2010

Я украсил свои действия [ValidateInput (false)], и это работает. У меня также есть это в моем web.config (см. здесь ):

<pages validateRequest="false">

Может быть, это можно установить для каждой страницы? На моем веб-сайте можно полностью перевернуть все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...