Razor 视图中输出未经编码的 HTML 内容的方法@Html.Raw()
2024-12-04

@Html.Raw() 是一个用于在 Razor 视图中直接输出未经编码的 HTML 内容的方法。它属于 System.Web.Mvc.HtmlHelper 类(在传统 ASP.NET MVC 中)或者 Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper 类(在 ASP.NET Core 中)。

功能

默认情况下,Razor 会对输出的字符串进行 HTML 编码,以防止 XSS(跨站脚本攻击)。@Html.Raw() 允许你跳过这种自动编码,直接将字符串作为 HTML 输出。

用法示例

1. 基本用法

假设你有以下内容需要在视图中显示:

string content = "<strong>重要内容</strong>";

直接使用 @content 会被 Razor 编码,结果如下:

&lt;strong&gt;重要内容&lt;/strong&gt;

但如果你使用 @Html.Raw(content),输出将是:

<strong>重要内容</strong>

2. 视图中的例子

@{
    var htmlString = "<h1>欢迎访问</h1>";
}

@Html.Raw(htmlString)

结果:

<h1>欢迎访问</h1>

注意事项

  1. 避免 XSS 漏洞

    • 由于 @Html.Raw() 跳过了 HTML 编码,如果输入的数据来源于用户或不可信的数据,可能会导致 XSS 漏洞。
    • 例如,如果用户输入了 <script>alert('XSS!')</script>,直接使用 @Html.Raw() 会让这个脚本在浏览器中执行。
  2. 建议仅在可信数据中使用

    • 确保传入 @Html.Raw() 的数据是可靠的、经过验证的。
  3. 安全替代方法

    • 如果数据包含特殊字符但不需要作为 HTML 渲染,应该让 Razor 自动进行编码,例如直接使用 @yourVariable