c# razor html-encode

razor c#



¿Cómo puedo exportar html sin formato cuando uso RazorEngine(NO desde MVC)? (6)

Construyó un contenedor para RazorEngine que agrega soporte para @Html.Raw() y @Html.Partial()

https://github.com/b9chris/RazorEngineComplete

Intento generar correos electrónicos con contenido HTML. este contenido ya ha pasado por saneamiento, así que no estoy preocupado en ese sentido, sin embargo, cuando llamo:

Razor.Parse(template, model);

en la siguiente plantilla Razor:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <body> @(new System.Web.HtmlString(Model.EmailContent)) </body> </html>

el correo electrónico que se emite tiene codificación HTM1, pero necesito que se decodifique. ¿Cómo puedo lograr esto?


Encontré que todo esto funcionó conmigo.

@{var myHtmlString = new HtmlString(res);} @myHtmlString @MvcHtmlString.Create(res) @Html.Raw(res)


Estoy usando RazorEngine 3.8.2 y @Raw(Model.Content) funciona perfectamente bien para mí.



RazorEngine, como el Razor View Engine de MVC, codificará automáticamente los valores escritos en la plantilla. Para evitar esto, presentamos una interfaz llamada IEncodedString , con las implementaciones predeterminadas como HtmlEncodedString y RawString .

Para usar este último, simplemente haga una llamada al método Raw incorporado de TemplateBase :

@Raw(Model.EmailContent)


Si tiene una clase base personalizada para sus plantillas, puede codificar el método Write para que se comporte de forma similar a la plantilla MVC normal: si el valor de salida es IHtmlString no debería codificarlo.

Aquí está el código que estoy usando en mi clase de TemplateBase :

// Writes the results of expressions like: "@foo.Bar" public virtual void Write(object value) { if (value is IHtmlString) WriteLiteral(value); else WriteLiteral(AntiXssEncoder.HtmlEncode(value.ToString(), false)); } // Writes literals like markup: "<p>Foo</p>" public virtual void WriteLiteral(object value) { Buffer.Append(value); }