Изящная обработка тегов HTML при отправке формы в asp.net MVC 2 - PullRequest
1 голос
/ 23 сентября 2010

Привет! У меня есть сайт MVC, и пользователи будут вводить текст для отображения на веб-странице. Я пытаюсь найти изящный способ обработки любого HTML, который пользователь пытается ввести - как вы, вероятно, будете знать, MVC 2 выдает ошибку для любого HTML в тексте.

Я использую ViewModels и украшаю свои свойства фильтрами из класса DataAnotation для проверки моих форм.

Кто-нибудь сейчас такой способ?

Есть ли какое-то сумасшедшее регулярное выражение, которое НЕ будет соответствовать HTML, но что-нибудь еще или каким-либо другим способом?

Я открыт для любых предложений.

Спасибо

Simon

Ответы [ 2 ]

3 голосов
/ 23 сентября 2010

Добавление следующего атрибута остановит время выполнения жалобы:

[ValidateInput(false)]
public ActionResult SomeEvilAction ()
{
    /* ... */
}

Теперь ваша задача - кодировать HTML каждый ввод, отображаемый на странице:

<%= HttpUtility.HtmlEncode (Model.Text) %>

или

<%: Model.Text %>
0 голосов
/ 23 сентября 2010

Я сделал именно эту вещь на сайте, который я сделал на днях.

Я использую редактор WYSIWYG, который вставляет правильный HTML, а не код bb.

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

См. Пост разработчика Art

Возможно, вам понадобится добавить это в ваш web.config

<httpRuntime requestValidationMode="2.0" />

Я использовал следующее регулярное выражение:

(?<startTag><\s*script[^>]*>)(?<scriptContent>[\s\S]*?)(?<endTag><\s*/script>)

Это даст вам 3 именованные группы. начальныйТег scriptContent ENDTAG

Таким образом, вы можете выполнить замену элемента script и показать содержимое сценария или полностью удалить его.

Все, что вы хотите сделать на самом деле.

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