[c#] RazorEngine을 사용할 때 원시 HTML을 출력하는 방법 (MVC가 아님)

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기본 구현이 HtmlEncodedString및 인 인터페이스를 도입했습니다 RawString.

후자를 사용하려면 다음의 내장 Raw메소드를 호출하기 만하면됩니다 TemplateBase.

@Raw(Model.EmailContent)


답변

참고로 여기에 @ Html.Raw (…) 구문이 포함 된 포크가 있습니다.

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


답변

템플릿에 대한 사용자 지정 기본 클래스가있는 경우 Write일반 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);
}


답변

RazorEngine 3.8.2를 사용하고 @Raw(Model.Content)있으며 완벽하게 잘 작동합니다.


답변

@Html.Raw()및 지원을 추가하는 RazorEngine 용 래퍼를 빌드했습니다.@Html.Partial()

https://github.com/b9chris/RazorEngineComplete


답변

이 모든 것이 저와 함께 작동한다는 것을 알았습니다.

@{var myHtmlString = new HtmlString(res);}
@myHtmlString


  @MvcHtmlString.Create(res)

  @Html.Raw(res)


답변