5

当用户在我的网站上输入电子邮件时,我会发送一封包含链接的电子邮件验证电子邮件。链接看起来像:

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)叶加完好。

4

3 回答 3

12

您可以Uri.EscapeDataString改用 - 我刚刚验证将“Foo+Bar”转换为“Foo%2BBar”。

老实说,如果 MS 就这些方法之间的区别以及HttpUtility.UrlEncode(并非在所有平台上都可用)提供更多指导,我将不胜感激。

于 2010-08-11T16:11:05.980 回答
2

您可以尝试UrlEncode方法:

string encodedEmail = HttpUtility.UrlEncode(email);
于 2010-08-11T16:10:38.067 回答
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('@', '+'));
于 2010-08-11T16:22:20.643 回答