RazorEngine で Html エンコード処理を行わないようにする
この前のcsHtml ファイルを使って RazorEngine の記事にて、
Html 以外で利用する場合、いちいち @Raw と書くのが少し面倒。
と書きましたが、エンコードしないで出力する設定方法がありました。
テンプレートで出力する前に、以下の様に設定を行います。
private static void RazorEngineSetup() { var config = new TemplateServiceConfiguration(); config.EncodedStringFactory = new RawStringFactory(); //↑ここ var myConfiguredTemplateService = new TemplateService(config); Razor.SetTemplateService(myConfiguredTemplateService); }
EncodedStringFactory に、new RawStringFactory() を指定すると、
Htmlエンコードされずに出力されます。
例えば下の様なテンプレートだと…
RazorEngineSetup(); var model = new { Name = "Taro", Message = "(>_ <)" }; var template = "Hello, @Model.Name! --> @Model.Message"; string result = Razor.Parse(template, model); Console.WriteLine(result);
逆に、new HtmlEncodedStringFactory() を設定すると、(または設定を行わないと
こう出力されます。
メール文作成等で RazorEngine を使うときは、RawStringFactory を指定した方が良さそうです。
他の設定方法
この設定方法は、
https://github.com/Antaris/RazorEngine/wiki/2.-Template-Basics に書いてあるのですが、古い書き方とされています。
下部の Using the fluent API の書き方でもできます。
が、その場合別の問題として、下の古い書き方のコード、
var config = new TemplateServiceConfiguration(); config.BaseTemplateType = typeof(MyTemplate<>);
に該当する、TemplateBase<> を継承したカスタムテンプレートの型を指定する方法が見つからないという問題が…。