Wie der Titel sagt, bekomme ich:
Ungültige Länge für ein Base-64-Zeichenarray.
Ich habe hier über dieses Problem gelesen und es scheint, dass der Vorschlag darin besteht, ViewState in SQL zu speichern, wenn es groß ist. Ich verwende einen Assistenten mit viel Datenerfassung, sodass mein ViewState wahrscheinlich groß ist. Aber bevor ich mich der "Store-in-DB" -Lösung zuwende, kann vielleicht jemand einen Blick darauf werfen und mir sagen, ob ich andere Optionen habe?
Ich konstruiere die E-Mail für die Zustellung mit der folgenden Methode:
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);
}
Die Verschlüsselungsmethode sieht folgendermaßen aus:
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);
}
So sieht der HTML-Code in Hotmail aus:
Bitte klicken Sie auf den unten stehenden Link oder fügen Sie ihn in einen Browser ein, um Ihr E-Mail-Konto zu überprüfen.
Auf der Empfangsseite enthält die Seite VerifyEmail.aspx.cs die folgende Zeile:
string username = Cryptography.Decrypt(_webContext.UserNameToVerify, "verify");
Hier ist der Getter für UserNameToVerify:
public string UserNameToVerify
{
get
{
return GetQueryStringValue("a").ToString();
}
}
Und hier ist die GetQueryStringValue-Methode:
private static string GetQueryStringValue(string key)
{
return HttpContext.Current.Request.QueryString.Get(key);
}
Und die Entschlüsselungsmethode sieht so aus:
public static string Decrypt(string cipherText, string password)
{
**// THE ERROR IS THROWN HERE!!**
byte[] cipherBytes = Convert.FromBase64String(cipherText);
Kann dieser Fehler mit einem Code-Fix behoben werden oder muss ich ViewState in der Datenbank speichern?