Испускание незакодированных строк в представлении Razor

Как ScottGu заявляет в его сообщении в блоге «содержанием по умолчанию, испускаемым с помощью, блоком является автоматически HTML, закодированный для лучше защиты от сценариев нападения XSS». Мой вопрос: как можно произвести строку non-HTML-encoded?

Ради простоты придерживайтесь этого простого случая:

@{
 var html = "Click me"
 // I want to emit the previous string as pure HTML code...
}

78
задан animuson 6 September 2012 в 21:59
поделиться

3 ответа

Вы можете создать новый экземпляр MvcHtmlString, который не будет кодировать HTML.

@{
  var html = MvcHtmlString.Create("<a href='#'>Click me</a>")
}

Надеюсь, в будущем Razor будет более простой путь.

Если вы не используете MVC, вы можете попробовать следующее:

@{
  var html = new HtmlString("<a href='#'>Click me</a>")
}
17
ответ дан 24 November 2019 в 10:36
поделиться

new HtmlString определенно ответ.

Мы рассмотрели некоторые другие изменения синтаксиса бритвы, но в конечном итоге ни одно из них не оказалось короче нового HtmlString.

Однако мы можем превратить это в помощника. Возможно ...

@Html.Literal("<p>something</p>")

или

@"<p>something</p>".AsHtml()
6
ответ дан 24 November 2019 в 10:36
поделиться

Я также столкнулся с этой проблемой при переходе нашего проекта на новый механизм просмотра Razor. Подход, который я использовал, немного отличался, потому что мы должны были генерировать данные JSON из C # и хотели выводить их при загрузке страницы.

В конечном итоге я реализовал RawView, который был параллелью View внутри файлов cshtml. По сути, чтобы получить необработанную строку

@(new HtmlString(View.Foo))

// became
@RawView.Foo

, необходимо внести несколько изменений в макет проекта, поэтому я просто написал об этом сообщение в блоге здесь . Короче говоря, для этого потребовалась дублированная реализация DynamicViewDataDictionary MVC и новый WebViewPage, содержащий RawView. Я также пошел дальше и реализовал оператор индекса в RawView, чтобы учесть

@RawView["Foo"]

На случай, если кому-то понадобится перебрать данные со списком ключей.

Читая комментарий анурса, наверное, было бы лучше, если бы я назвал это как Literal вместо RawView.

0
ответ дан 24 November 2019 в 10:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: