如何阻止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
相关产品推荐
相关产品推荐

