我有一个包含createuserwizard控件的网站。创建帐户后,验证电子邮件及其验证URL将发送到用户的电子邮件地址。
但是,当我进行测试运行时,点击电子邮件中的URL后会出现此错误:
Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
Source Error:
Line 17: {
Line 18: //store the user id
*Line 19: Guid userId = new Guid(Request.QueryString["ID"]);*
Line 20:
Error appeared on LINE 19.
另一个有趣的事情是,我的测试运行中的验证网址看起来很奇怪:
http://localhost:4635/WebSite2/Verify.aspx?ID=System.Security.Principal.GenericPrincipal
通常,网址应该是这样的(网址末尾有很多字符:
http://localhost:2180/LoginPage/EmailConfirmation.aspx?ID=204696d6-0255-41a7-bb0f-4d7851bf7200
我其实在想,它与URL的结尾有一个连接我的错误问题(Guid应该包含32个数字,有4个破折号)..
生成URL的代码如下:
protected void CreateUserWizard1_SendingMail(object sender,MailMessageEventArgs e)
{
string domainName = Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath;
string confirmationPage = "/Verify.aspx?ID=" + User.ToString();
string url = domainName + confirmationPage;
e.Message.Body = e.Message.Body.Replace("<%VerificationUrl%>", url);
}
请给我建议以及我应该怎样做才能解决这个问题。
提前致谢。
更新
protected void CreateUserWizard1_SendingMail(object sender,MailMessageEventArgs e)
{
MembershipUser userInfo = Membership.GetUser(CreateUserWizard1.UserName);
Guid userInfoId = (Guid)userInfo.ProviderUserKey;
string domainName = Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath;
string confirmationPage = "/Verify.aspx?ID=" + userInfo.ToString();
string url = domainName + confirmationPage;
e.Message.Body = e.Message.Body.Replace("<%VerificationUrl%>", url);
}
现在我的URL链接看起来像这样:
http://localhost:4635/WebSite2/Verify.aspx?ID=username
但是错误“Guid应该包含32位数字和4个破折号(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”仍然存在
答案 0 :(得分:4)
你有一句话说:
Guid userInfoId = (Guid)userInfo.ProviderUserKey;
当然这是您应该在URL中提供的内容吗?
string confirmationPage = "/Verify.aspx?ID=" + userInfoId.ToString();
答案 1 :(得分:3)
您将ID设置为:
User.ToString()
这解析为字符串:
"System.Security.Principal.GenericPrincipal"
我没有在任何地方看到GUID,所以任何人都猜测你想要如何生成它。
答案 2 :(得分:0)
您没有传递您的案例GUID中的ID,您正在尝试传递ID value=User.Tostring().
答案 3 :(得分:0)
您应该进行两项更改。首先,如上所述,User.ToString()
将始终生成"System.Security.Principal.GenericPrincipal"
。您应该将其更改为:
User.Guid.ToString()
其次,您的网页应该更具防御性,并使用TryParse,如下所示:
Guid g;
if (Guid.TryParse(Request.QueryString["ID"], out g))
// its a good Guid
else
// its not a valid Guid