繁体   English   中英

如何使用HTML unicode转义停止ASP.NET Core 2 MVC的剃刀引擎?

[英]How to stop ASP.NET Core 2 MVC's razor engine using HTML unicode escaping?

通常创建一个默认的ASP.NET Core 2 MVC项目,然后稍微修改一下这个动作:

public IActionResult About()
{
    ViewData["Message"] = "This is Chinese[中文]";
    return View();
}

这是视图(About.cshtml):

<h3>@ViewData["Message"]</h3>
<h3>这也是中文</h3>

这是浏览器中的输出结果:

<h3>This is Chinese[&#x4E2D;&#x6587;]</h3>
<h3>这也是中文</h3>

我发现'@'符号呈现的中文文本是html unicode转义。 问题是如何阻止'@'符号来逃避我的文字?

根据这篇文章

默认情况下,编码器使用限制为Basic Latin Unicode范围的安全列表,并将该范围之外的所有字符编码为其等效的字符代码。 此行为也会影响Razor TagHelper和HtmlHelper呈现,因为它将使用编码器输出您的字符串。

本文还提供了一种自定义默认html编码器的正确方法。 将以下注册添加到Startup.ConfigureServices方法:

services.AddSingleton<HtmlEncoder>(
    HtmlEncoder.Create(allowedRanges: new[] { UnicodeRanges.BasicLatin,
        UnicodeRanges.CjkUnifiedIdeographs }));

这是调整后的结果html代码:

<h3>This is Chinese[中文]</h3>
<h3>这也是中文</h3>

问题

由于HTML正在被ESCAPED,DotNet Core Controller正在返回未正确呈现的HTML。

答案

@Html.Raw(ViewData["Message"])

合理的

当Razor调用创建HTML的自定义函数时,返回的HTML通常会自动转义。 这是设计的,并且对于许多框架(如Rails)来说并不罕见。 无论如何,自定义函数返回的OUTPUT必须呈现为RAW。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM