8

createuserwizard コントロールを含む Web サイトがありました。また、アカウントを作成すると、確認メールとその確認 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. 

もう 1 つの面白い点は、テスト実行の検証 URL が奇妙に見えることです。

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

通常、URL は次のようになります (これは、URL の末尾にある非常に多くの文字です:

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

私が実際に考えていたのは、エラーの問題で URL の末尾に接続されていることです (Guid には 4 つのダッシュを含む 32 桁が含まれている必要があります)。

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 には 4 つのダッシュを含む 32 桁を含める必要があります (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx」というエラーが残りました。

4

4 に答える 4

4

次のような行があります。

Guid userInfoId = (Guid)userInfo.ProviderUserKey;

これは、URL で提供する必要があるものでしょうか?

string confirmationPage = "/Verify.aspx?ID=" + userInfoId.ToString();
于 2012-06-27T12:33:34.230 に答える
3

IDを次のように設定しています。

User.ToString()

これは文字列に解決されます:

"System.Security.Principal.GenericPrincipal"

GUIDはどこにも表示されないので、これをどのように生成するかは誰にもわかりません。

于 2012-06-27T10:56:08.063 に答える
1

あなたのケースの GUID にある ID を渡していません。ID を渡そうとしています。value=User.Tostring().

于 2012-06-27T10:57:32.330 に答える
0

2 つの変更を行う必要があります。まず、前述のようUser.ToString()に、常に生成され"System.Security.Principal.GenericPrincipal"ます。これを次のように変更する必要があります。

User.Guid.ToString()

次に、Web ページはより防御的にコーディングし、TryParse を次のように使用する必要があります。

  Guid g;
  if (Guid.TryParse(Request.QueryString["ID"], out g))
    // its a good Guid
  else
    // its not a valid Guid
于 2012-06-27T11:11:30.953 に答える