Излучение незашифрованных строк в виде Razor - PullRequest
78 голосов
/ 28 июля 2010

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

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

@{
 var html = "<a href='#'>Click me</a>"
 // I want to emit the previous string as pure HTML code...
}

Ответы [ 5 ]

109 голосов
/ 08 февраля 2011

Это мой любимый подход:

@Html.Raw("<p>my paragraph text</p>")

Источник - ссылка на синтаксис Фила Хаака Razor: http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx

17 голосов
/ 29 июля 2010

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

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

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

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

@{
  var html = new HtmlString("<a href='#'>Click me</a>")
}
6 голосов
/ 29 июля 2010

Новый HtmlString, безусловно, ответ.

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

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

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

или

@"<p>something</p>".AsHtml()
0 голосов
/ 05 февраля 2019

Я использую ASP.NET MVC и Razor под Mono.

Мне не удалось получить HtmlHelper из System.Web.WebPages из System.Web.Mvc по некоторым причинам.

Но мне удалось вывести некодированную строку после объявления свойства модели как RazorEngine.Text.RawString. Теперь выводит, как и ожидалось.

Пример

@{
    var txt = new RawString("some text with \"quotes\"");
    var txt2 = "some text with \"quotes\"";
}
<div>Here is unencoded text: @txt</div>
<div>Here is encoded text: @txt2</div>

Выход:

<div>Here is unencoded text: some text with "quotes"</div>
<div>Here is encoded text: some text with &quot;quotes&quot;</div>
0 голосов
/ 19 августа 2010

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

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

@(new HtmlString(View.Foo))

// became
@RawView.Foo

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

@RawView["Foo"]

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

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

...