ASP.NET Core: Как убрать автоматическое кодирование html тегов?
Программа из базы данных SQLite получает текст с html тегами, затем текст выводится пользователю в браузере. Подразумевается, что теги автоматически преобразуются в html, но вместо этого теги просто кодируются.
Подскажите, как сделать так, чтобы браузер преобразовывал теги?
Ответы (1 шт):
Решение:
@Html.Raw("Тут вставить HTML код строкой");
Объяснение:
По умолчанию вывод собачкой @
выполняет подмену определённых символов в целях безопасности. Чтобы изменить поведение необходимо вызвать метод Html.Raw
. Его не рекомендуется использовать без посредников (нужна защита от злоумышленников, вид атаки JS-инъекция например).
Лучший способ определить границы дозволенного — это создать пользовательский Markdown syntax
или воспользоваться существующими решениями. По нему можно будет выполнять безопасную подмену определёнными HTML
тегами.
Что происходит за кадром:
Код, который генерируется, если указываем только собачку @
:
Write(@"<div style=""background-color: red;"">Текст</div>");
Если вызываем метод Html.Raw
:
Write(Html.Raw(@"<div style=""background-color: red;"">Текст</div>"));
Метод Html.Raw
возвращает не строку, а тип IHtmlContent
, засчёт которого метод Write
может понять как правильно записать данные в поток ответа.