.NET Razor Pages账号确认失败:链接有Code但接收时为Null的原因
.NET Razor Pages账号确认Code为Null的解决方案
问题根源
你怀疑的HtmlEncoder.Default.Encode(callbackUrl)确实是问题核心:当你对整个callbackUrl做HTML编码时,URL中的参数分隔符&会被转成&,后端解析链接时无法识别code参数,最终导致接收值为Null。
解决步骤
单独编码参数值,而非整个URL
生成确认链接时,只对userId和code的参数值进行编码,再拼接成完整URL,示例代码:var userId = UserManager.GetUserId(user); var code = await UserManager.GenerateEmailConfirmationTokenAsync(user); // 仅编码参数值 userId = HtmlEncoder.Default.Encode(userId); code = HtmlEncoder.Default.Encode(code); var callbackUrl = Url.Page( "/Account/ConfirmEmail", pageHandler: null, values: new { userId = userId, code = code }, protocol: Request.Scheme);避免邮件模板重复编码
邮件中渲染确认链接时,直接输出已正确生成的callbackUrl即可,不要再次对链接做HTML编码,防止&被二次转义。验证链接格式
确保最终生成的链接中参数分隔符是&而非&,正确格式示例:https://你的域名/Account/ConfirmEmail?userId=xxx&code=xxx
内容的提问来源于stack exchange,提问作者Yazan Aqel
相关产品推荐
相关产品推荐

