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

guo*_*ngj 5 c# asp.net-core-mvc asp.net-core asp.net-core-2.0

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

public IActionResult About()
{
    ViewData["Message"] = "This is Chinese[??]";
    return View();
}
Run Code Online (Sandbox Code Playgroud)

这是视图(About.cshtml):

<h3>@ViewData["Message"]</h3>
<h3>?????</h3>
Run Code Online (Sandbox Code Playgroud)

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

<h3>This is Chinese[&#x4E2D;&#x6587;]</h3>
<h3>?????</h3>
Run Code Online (Sandbox Code Playgroud)

我发现'@'符号渲染的中文文本是html unicode转义的。问题是如何停止“@”符号来转义我的文本?

Cod*_*ler 5

根据这篇文章

默认情况下,编码器使用仅限于基本拉丁语 Unicode 范围的安全列表,并将该范围之外的所有字符编码为它们的等效字符代码。此行为还会影响 Razor TagHelper 和 HtmlHelper 渲染,因为它将使用编码器输出您的字符串。

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

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

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

<h3>This is Chinese[??]</h3>
<h3>?????</h3>
Run Code Online (Sandbox Code Playgroud)