2012-06-27 30 views
5

Tenía un sitio web que contiene un control createuserwizard. Y al crear una cuenta, el correo electrónico de verificación junto con su URL de verificación se enviarán a la dirección de correo electrónico del usuario.Guid debería contener 32 dígitos con 4 guiones

Sin embargo, cuando tengo una ejecución de prueba, al hacer clic en la URL del correo electrónico, aparecerá este error:

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. 

Otro Lo curioso es que la URL de verificación en mi prueba de gestión parecer extraño:

http://localhost:4635/WebSite2/Verify.aspx?ID=System.Security.Principal.GenericPrincipal 

Normalmente, la URL debe así (lo cual es una gran cantidad de caracteres al final de la URL:

http://localhost:2180/LoginPage/EmailConfirmation.aspx?ID=204696d6-0255-41a7-bb0f-4d7851bf7200 

En realidad estaba pensando que, hay una conexión con el final de la URL con mi problema del error (Guid debe contener 32 dígitos con 4 guiones) ..

El código que genera la URL es el siguiente:

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); 
} 

Por favor, dame sugerencias y qué debo hacer para resolver este problema.

Gracias de antemano.

ACTUALIZACIÓN:

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); 

} 

Ahora mi URL siguiente aspecto:

http://localhost:4635/WebSite2/Verify.aspx?ID=username 

Pero el error "Guid debe contener 32 dígitos con 4 guiones (xxxxxxxx xxxxxxxx-xxxx- -xxxxxxxxxxxx "sigue siendo

+1

¿Qué le parece mostrar el código que genera el enlace? Eso es claramente donde radica el problema. – spender

+0

este es el código para generar la URL: protected void CreateUserWizard1_SendingMail (remitente del objeto, MailMessageEventArgs e) { // MembershipUser userInfo = Membership.GetUser (CreateUserWizard1.UserName); // Guid userInfoId = (Guid) userInfo.ProviderUserKey; string domainName = Request.Url.GetLeftPart (UriPartial.Authority) + Request.ApplicationPath; cadena confirmationPage = "/Verify.aspx?ID=" + User.ToString(); string url = domainName + confirmationPage; e.Message.Body = e.Message.Body.Replace ("<% VerificationUrl%>", url); } – user1467175

Respuesta

4

Tienes una línea que dice:

Guid userInfoId = (Guid)userInfo.ProviderUserKey; 

Seguramente esto es lo que debe proporcionar en la URL?

string confirmationPage = "/Verify.aspx?ID=" + userInfoId.ToString(); 
+0

Sí, esta línea es la parte posterior de la URL – user1467175

+0

Sí, pero mi versión es diferente a la suya. He usado 'userInfoId.ToString()'. Usó 'userInfo.ToString()' –

+0

¡Tiene razón, lo cambié a userInfoId y solucionó el error! Gracias (: – user1467175

3

Está configurando la ID como:

User.ToString() 

Esto se resuelve con la cadena:

"System.Security.Principal.GenericPrincipal" 

no veo un GUID en cualquier lugar, por lo que es una incógnita en cuanto a cómo desea generar esto.

+0

¿Dónde debería colocar este "System.Security.Principal.GenericPrincipal"? como un espacio de nombres? – user1467175

0

No está de paso de identificación que se encuentra en su caso GUID, que están tratando de pasar Identificación value=User.Tostring().

0

Usted debe hacer dos cambios. En primer lugar, como se menciona User.ToString() siempre producirá "System.Security.Principal.GenericPrincipal". Debe cambiar esto:

User.Guid.ToString() 

En segundo lugar, su página web debe codificar más defensivo y usar TryParse como en:

Guid g; 
    if (Guid.TryParse(Request.QueryString["ID"], out g)) 
    // its a good Guid 
    else 
    // its not a valid Guid 
Cuestiones relacionadas