当用户在我的网站上输入电子邮件时,我会发送包含链接的电子邮件验证电子邮件。链接看起来像:
http://mysite.com/VerifyEmail?email=name@domain.com&token=12341234
此特定用户的电子邮件包含“+”(加号),因此链接如下所示:
http://mysite.com/VerifyEmail?email=foo+bar@domain.com&token=12341234
点击链接时(至少在Firefox中)加上替换为空格。
问题:我在.net中使用什么URL编码功能来逃避加号。
注意:Uri.EscapeUriString(email)
离开并保持原样。
答案 0 :(得分:12)
您可以使用Uri.EscapeDataString
- 我刚刚确认将“Foo + Bar”转换为“Foo%2BBar”。
老实说,如果MS对这些方法之间的差异以及HttpUtility.UrlEncode
(在所有平台上都不提供)提供了更多指导,我将不胜感激。
答案 1 :(得分:2)
您可以尝试UrlEncode方法:
string encodedEmail = HttpUtility.UrlEncode(email);
答案 2 :(得分:0)
您可以做的最好的事情是对电子邮件地址进行哈希或加密,或者在您的令牌上“包含”它。
这样,您的链接可能如下所示: http://mysite.com/VerifyEmail?token=12341234480348204023
或者: http://mysite.com/VerifyEmail?emailcode=A124E4F325O425FE5F4J6636K66L&token=12341234
如果您遵循哈希路由,请记住Base64在编码时也使用+
作为有效字符。通常的做法是用@或其他东西替换它:
var emailcode = Convert.ToBase64String(GetHashBytes(email)).Replace('+', '@');
然后,当您执行确认时:
var emailcodebytes = Convert.FromBase64String(Request["code"].Replace('@', '+'));