簡體   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