Comme le titre l'indique, je reçois :
Longueur non valide pour une Base- de base-64.
J'ai lu ce problème sur ce site et il semble que la fonction de stocker le ViewState dans SQL s'il est volumineux. Je suis j'utilise un assistant avec un grand nombre de données collectées, il y a donc des chances donc il y a de fortes chances que mon ViewState soit volumineux. Mais, avant de me tourner vers la solution du "stockage dans la base de données", j'ai décidé d'utiliser la solution du "stockage dans la base de données". dans la base de données, quelqu'un pourrait peut-être jeter un coup d'œil et me dire si j'ai d'autres options ? d'autres options ?
Je construis l'e-mail pour l'envoyer en utilisant la méthode ci-dessous :
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);
}
La méthode Encrypt se présente comme suit :
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);
}
Voici à quoi ressemble le code HTML dans hotmail :
Veuillez cliquer sur le lien ci-dessous ou le coller dans un navigateur pour vérifier votre compte e-mail.
http://localhost:1563/Accounts/VerifyEmail.aspx?a=YOHY57xYRENEOu3H+FGq1Rf09AZAI56EPjfwuK8XWKg=
Du côté de la réception, la page VerifyEmail.aspx.cs contient la ligne :
string username = Cryptography.Decrypt(_webContext.UserNameToVerify, "verify");
Voici le getter pour UserNameToVerify :
public string UserNameToVerify
{
get
{
return GetQueryStringValue("a").ToString();
}
}
Voici la méthode GetQueryStringValue :
private static string GetQueryStringValue(string key)
{
return HttpContext.Current.Request.QueryString.Get(key);
}
Et la méthode de décryptage se présente comme suit :
public static string Decrypt(string cipherText, string password)
{
**// THE ERROR IS THROWN HERE!!**
byte[] cipherBytes = Convert.FromBase64String(cipherText);
Cette erreur peut-elle être corrigée par une correction de code ou dois-je stocker ViewState dans la base de données ?