我目前正在使用 ASP.NET身份注册后使用电子邮件确认。
此库提供完成注册所需的令牌生成。此令牌在我们的应用程序中用于以下路径:
https://localhost/#/account/{token}/setup
通过调用:
生成令牌var emailToken = _userManager.GenerateEmailConfirmationToken(newUser.Id);
生成令牌后,我会以string.Format
这种方式将其添加到路径中:
string.Format("https://localhost/#/account/{0}/setup", HttpUtility.UrlEncode(emailToken));
结果如下:
但是当我在浏览器中打开这个网址时,我得到了:
我看到的是,网址在电子邮件正文中正确编码,但是当我在浏览器中打开它时,通过替换编码的"%2f" 进行解码到" /" 。这导致我的应用程序中的路由无效,因为我希望" /"成为不同资源之间的分隔符。
对这种行为的任何想法?
参考文献:
答案 0 :(得分:3)
它可能正在解码它,因为它认为它是路径的一部分。
我建议您明确将其视为参数。这将告诉浏览器不要解码它。例如,而不是这条路径:
https://localhost/#/account/AQAAANCMnd8BFdERjHoAwE%2fCl%2bsBAAAA6gbQh ..........
使用此路径:
https://localhost/#/account/?t=AQAAANCMnd8BFdERjHoAwE%2fCl%2bsBAAAA6gbQh ......
请注意在帐户路径结束后添加?t=
。
然后在应用程序中使用t
参数。这将告诉浏览器最终的值不会被解码为路径的一部分,而是以编码形式保存,因为它是一个参数。
这显然会改变你的路径(因为设置部分),所以要相应调整。