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

ASP.NET Core中Razor引擎生成URL时&转义异常导致激活链接失效问题

解决ASP.NET Core Razor模板生成激活邮件时&被转义导致的参数解析问题

这个问题我之前也碰到过,核心原因是Razor引擎默认会对HTML输出中的特殊字符进行编码,所以你用@Model.Url输出链接时,URL里的&会被转成&——这在标准HTML里是合规的,但有些邮件客户端(比如Gmail)在解析或者显示纯文本链接时,会把&当成实际的参数分隔符,导致userId参数被截断,最终变成null。

下面给你两个靠谱的解决办法:

方法一:用Html.Raw()输出原始URL

直接在Razor模板里告诉引擎不要编码这个URL字符串,把模板里的链接代码改成:

<p><a href="@Html.Raw(Model.Url)" class="button">ACTIVATE MY ACCOUNT</a></p>

Html.Raw()会跳过Razor的自动编码逻辑,直接输出你生成的原始URL,这样链接里的&就会保留成原本的样子,不管邮件客户端是渲染HTML还是显示纯文本,都能正确解析出code和userId两个参数。

方法二:提前处理URL(可选)

如果你不想在模板里用Html.Raw(),也可以在生成activationMailViewModel.Url之后,手动确保URL不被后续编码,但这个方法不如第一种直接。不过原理是一样的——保证最终输出到邮件里的URL是原始的、未被HTML编码的格式。

验证效果

修改后,生成的邮件HTML里的链接href会是:

http://base.url.net/Account/ConfirmEmail?code=xxx&userId=xxx

而不是带&amp;的版本,这样不管是ProtonMail还是Gmail,用户点击链接时,AccountController的ConfirmEmail方法都能正确获取到code和userId参数,不会再出现激活失败的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:24:07