
本文详解如何在 C# 中正确将动态 URL 注入多行 HTML 字符串模板,避免语法错误与转义问题,推荐使用 C# 11+ 的插值原始字符串($$"""...""")结合双大括号转义,实现清晰、安全、可维护的 HTML 字符串生成。
本文详解如何在 c# 中正确将动态 url 注入多行 html 字符串模板,避免语法错误与转义问题,推荐使用 c# 11+ 的插值原始字符串($$"""...""")结合双大括号转义,实现清晰、安全、可维护的 html 字符串生成。
在构建邮件模板、导出 HTML 报告或生成前端嵌入内容时,常需用 C# 方法返回含动态参数的 HTML 字符串。但直接在 @"" 原始字符串中拼接变量(如 <a href="+%20url%20+%20"></a>)会破坏原始字符串结构,导致编译错误——因为 @"" 内部不支持表达式拼接,且引号嵌套极易出错。
✅ 正确做法:使用插值原始字符串(Interpolated Raw String)(C# 11 起正式支持)。它兼具原始字符串的免转义特性与插值功能,且通过 $$ 前缀明确标识插值上下文,同时用 {{ }} 表示字面量 { 和 }(用于保留原有 {2}、{3} 等占位符,供后续 string.Format() 使用)。
以下是重构后的 LoadRemovedSheetTemplate 方法示例:
private static string LoadRemovedSheetTemplate(string url)
{
return $$"""
<html>
<head>
<title></title>
<meta charset="utf-8" />
</head>
<body style="margin: 0; padding: 10px; box-sizing: border-box; background-color: #f9f9fa; margin: 20px;">
<div class="container" style="margin: 0; padding: 0; box-sizing: border-box; background-color: #f9f9fa; margin-left: auto; margin-right: auto; width: max-content;">
<div class="main-content-section" style="background-color: #fff; height: 600px; margin-bottom: 20px; box-shadow: rgba(0, 0, 0, 0.02) 0px 1px 3px 0px, rgba(27, 31, 35, 0.15) 0px 0px 0px 1px; padding: 25px; height: max-content; width: max-content;">
<div class="top-logo-section" style="text-align: center;">
<div style="height: 100px; margin-bottom: 10px;">
<img src="https://dwihn.org//images/logo.png" alt="BizAnalytix Technologies" style="max-width:90%" />
</div>
</div>
<p style="font-size: 14px; font-family: sans-serif; line-height: 25px; color: #000000; letter-spacing: 0.2px;">Dear {{2}},</p>
<p style="font-size: 14px; font-family: sans-serif; line-height: 25px; color: #000000; letter-spacing: 0.2px;">
Claim has been removed from the audit {{3}}.
</p>
<p style="font-size: 14px; font-family: sans-serif; line-height: 25px; color: #000000; letter-spacing: 0.2px;">
<a href="{{url}}/AuditProject/OngoingAudits">Click here</a> to view.
</p>
<p style="font-size: 14px; font-family: sans-serif; line-height: 25px; color: #000000; letter-spacing: 0.2px;">Thank You,</p>
<p style="font-size: 14px; font-family: sans-serif; line-height: 25px; color: #000000; letter-spacing: 0.2px;">CATS Support</p>
<div class="bottom-logo-section" style="text-align: center;">
<div style="margin:0;">
<p style="font-size: 14px; font-family: sans-serif; color: #000000;">
Powered By:
</p>
<img src="https://bizanalytix.com/wp-content/uploads/2020/12/BizAnalytix-New-Logo.png" style="max-width:90%" / alt="C# 中使用插值原始字符串安全拼接动态 HTML 模板" >
</div>
</div>
</div>
</div>
</body>
</html>
""";
}? 关键要点说明:
立即学习“前端免费学习笔记(深入)”;
- ✅
$$"""..."""启用插值原始字符串:无需转义双引号(")、反斜杠(\)或换行符,HTML 结构天然对齐; - ✅
{{url}}表示插入url变量值;{{2}}和{{3}}是字面量双大括号,会被原样保留为{2}、{3},便于后续调用string.Format(result, arg1, arg2)填充; - ❌ 避免混合
@""与+拼接:原始字符串内无法执行表达式,强行拼接会中断字符串字面量,引发 CS1056(意外字符)等编译错误; - ⚠️ 注意 URL 安全性:若
url来自用户输入,务必先校验并清理(如使用Uri.IsWellFormedUriString(url, UriKind.Absolute)),防止 XSS 或协议混淆(如注入javascript:); - ? 进阶建议:对于复杂 HTML 模板,推荐迁移到 Razor 视图引擎或专用模板库(如 Scriban、Fluid),提升可测试性与可维护性。
通过插值原始字符串,你既能保持 HTML 的可读性与结构完整性,又能安全、简洁地注入动态值——这是现代 C# 处理内联 HTML 模板的最佳实践。



















