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)
답변
답변
템플릿에 대한 사용자 지정 기본 클래스가있는 경우 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()
답변
이 모든 것이 저와 함께 작동한다는 것을 알았습니다.
@{var myHtmlString = new HtmlString(res);}
@myHtmlString
@MvcHtmlString.Create(res)
@Html.Raw(res)
답변
