タイトルが言うように、私は得ています:
Base-64文字配列の長さが無効です。
私はここでこの問題について読みましたが、ViewStateが大きい場合はSQLに保存することをお勧めしているようです。大量のデータ収集を伴うウィザードを使用しているため、ViewStateが大きい可能性があります。しかし、「store-in-DB」ソリューションに目を向ける前に、誰かが見て、他のオプションがあるかどうか教えてくれるかもしれません。
以下の方法で配信用のメールを作成します。
public void SendEmailAddressVerificationEmail(string userName, string to)
{
string msg = "Please click on the link below or paste it into a browser to verify your email account.<BR><BR>" +
"<a href=\"" + _configuration.RootURL + "Accounts/VerifyEmail.aspx?a=" +
userName.Encrypt("verify") + "\">" +
_configuration.RootURL + "Accounts/VerifyEmail.aspx?a=" +
userName.Encrypt("verify") + "</a>";
SendEmail(to, "", "", "Account created! Email verification required.", msg);
}
Encryptメソッドは次のようになります。
public static string Encrypt(string clearText, string Password)
{
byte[] clearBytes = System.Text.Encoding.Unicode.GetBytes(clearText);
PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
byte[] encryptedData = Encrypt(clearBytes, pdb.GetBytes(32), pdb.GetBytes(16));
return Convert.ToBase64String(encryptedData);
}
hotmailでのHTMLの外観は次のとおりです。
以下のリンクをクリックするか、ブラウザに貼り付けて、メールアカウントを確認してください。
受信側では、VerifyEmail.aspx.csページに次の行があります。
string username = Cryptography.Decrypt(_webContext.UserNameToVerify, "verify");
UserNameToVerifyのゲッターは次のとおりです。
public string UserNameToVerify
{
get
{
return GetQueryStringValue("a").ToString();
}
}
そして、これがGetQueryStringValueメソッドです。
private static string GetQueryStringValue(string key)
{
return HttpContext.Current.Request.QueryString.Get(key);
}
そして、復号化メソッドは次のようになります。
public static string Decrypt(string cipherText, string password)
{
**// THE ERROR IS THROWN HERE!!**
byte[] cipherBytes = Convert.FromBase64String(cipherText);
このエラーはコード修正で修正できますか、それともViewStateをデータベースに保存する必要がありますか?