You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止ASP.NET Core 2 MVC的Razor引擎进行HTML Unicode转义?

解决ASP.NET Core 2 MVC中ViewData渲染中文被HTML转义的问题

这个问题我之前也碰到过,其实是Razor的默认HTML编码机制在起作用~Razor视图引擎为了防止XSS攻击,默认会对所有通过@语法输出的动态内容(比如ViewData、模型属性这类)进行HTML编码,所以你从控制器传过来的中文就被转成了中文这种Unicode实体;而视图里直接写的静态中文属于模板固定内容,不会被编码,所以能正常显示。

下面给你两种实用的解决办法:

方法一:用Html.Raw()跳过编码

直接在视图里把@ViewData["Message"]改成@Html.Raw(ViewData["Message"]),这样Razor就会直接输出原始内容,不会再做编码处理。

修改后的About.cshtml代码:

<h3>@Html.Raw(ViewData["Message"])</h3>
<h3>这也是中文</h3>

提醒:如果ViewData["Message"]的内容来自用户输入或者其他不可信来源,使用Html.Raw()可能存在XSS攻击风险,这种情况建议先对内容做安全过滤再使用。

方法二:在控制器传递HTML安全内容

在控制器里把ViewData["Message"]的值包装成HtmlString类型(需要先引用Microsoft.AspNetCore.Html命名空间),Razor会识别这是已经处理过的安全内容,不会再进行编码。

修改后的控制器代码:

using Microsoft.AspNetCore.Html; // 记得添加这个命名空间

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

视图代码不用修改,依然保留@ViewData["Message"]即可,此时输出的中文就能正常显示了。

这两种方法都能解决你的问题,根据自己的业务场景选择就行~

内容的提问来源于stack exchange,提问作者guogangj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:18:42