如何使用RazorEngine(不是从MVC)输出原始html

我正在尝试生成HTML内容的电子邮件。 这个内容已经通过了卫生,所以我不担心这个问题,但是当我打电话给:

Razor.Parse(template, model); 

在以下Razor模板上:

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

输出的电子邮件是HTMl编码,但我需要解码。 我怎样才能做到这一点?

与MVC的Razor View Engine一样,RazorEngine将自动编写写入模板的值。 为了解决这个问题,我们引入了一个名为IEncodedString的接口,默认的实现是HtmlEncodedStringRawString

要使用后者,只需调用TemplateBase的内置Raw方法:

 @Raw(Model.EmailContent) 

仅供参考我有一个叉包括@ Html.Raw(…)语法在这里:

https://github.com/Antaris/RazorEngine/pull/105

如果你的模板有一个自定义的基类,你可以编写Write方法来performance类似于正常的MVC模板:如果输出值是IHtmlString它不应该对它进行编码。

以下是我在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); } 

我发现所有这些与我一起工作。

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