Como dice ScottGu en su blog después «de contenido predeterminado emitida utilizando un bloque @ es automáticamente HTML codificada a una mejor protección contra los escenarios de ataque XSS». Mi pregunta es: ¿cómo se puede generar una cadena no codificada en HTML?
En aras de la simplicidad, los pls se adhieren a este simple caso:
@{
var html = "<a href='#'>Click me</a>"
// I want to emit the previous string as pure HTML code...
}
asp.net
razor
html-encode
hemme
fuente
fuente
new HtmlString()
en MVC 3, ya que ese tipo es .NET 4.new HtmlString es definitivamente la respuesta.
Analizamos algunos otros cambios de sintaxis de razor, pero al final ninguno de ellos terminó siendo realmente más corto que el nuevo HtmlString.
Sin embargo, podemos envolver eso en un ayudante. Posiblemente...
@Html.Literal("<p>something</p>")
o
@"<p>something</p>".AsHtml()
fuente
También encontré este problema al realizar la transición de nuestro proyecto al nuevo motor de vista de Razor. El enfoque que tomé fue ligeramente diferente porque teníamos que generar datos JSON desde C # y queríamos generarlos al cargar la página.
Lo que finalmente hice fue implementar un RawView que era un paralelo de View dentro de los archivos cshtml. Básicamente, para obtener una cadena sin procesar,
@(new HtmlString(View.Foo)) // became @RawView.Foo
Esto requiere algunos cambios en el diseño del proyecto, así que acabo de escribir una publicación de blog al respecto aquí . En resumen, esto requirió una implementación duplicada del DynamicViewDataDictionary de MVC y una nueva WebViewPage que contiene RawView. También seguí adelante e implementé el operador de índice en RawView para permitir
@RawView["Foo"]
En la remota posibilidad de que alguien necesite recorrer los datos con una lista de claves.
Al leer el comentario de una enfermera, probablemente hubiera sido mejor si hubiera nombrado esto como Literal en lugar de RawView.
fuente
Estoy usando ASP.NET MVC y Razor en Mono.
No pude obtener HtmlHelper de System.Web.WebPages de System.Web.Mvc por algunas razones.
Pero logré generar una cadena no codificada después de declarar la propiedad del modelo como
RazorEngine.Text.RawString
. Ahora sale como se esperaba.Ejemplo
@{ 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>
Salida:
<div>Here is unencoded text: some text with "quotes"</div> <div>Here is encoded text: some text with "quotes"</div>
fuente