测试“Base-64字符串中的无效字符”

时间:2012-12-26 18:38:12

标签: c# .net base64 html-encode

我在应用程序日志中看到“Base-64字符串中的无效字符”错误。我已经阅读了一些不同的原因,为什么它可能会出现和一些潜在的修复。问题是我无法在本地重现错误。

我相信它会在HttpUtility.HtmlEncode来电时出现,但我并不确定。

这是我的错误中的StackTrace:

at System.Convert.FromBase64String(String s)     
at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString)     
at System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState)     
at System.Web.UI.HiddenFieldPageStatePersister.Load()  

错误发生在电子邮件提交表单上;用户输入姓名,电子邮件地址和消息,并通过SMTP发送到每个指定的电子邮件地址。

我正在寻找一些方法可以尝试并强制发生此错误,以便我可以修复它。

代码段如下:

    var emailMessage = new MailMessage();
    emailMessage.From = new MailAddress(emailAddress, name);
    emailMessage.Subject = "Subject";
    emailMessage.Body = HttpUtility.HtmlEncode(message);
    emailMessage.To.Add(new MailAddress(contactEmailAddress, contactName));
    var smtpClient = new SmtpClient(ConfigurationManager.AppSettings["SMTPServer"]);
    smtpClient.Send(emailMessage);

1 个答案:

答案 0 :(得分:1)

与任何好的标准一样,Base64也有很多选择。这个wikipedia article列出了常见的变体,其中一些将被.NET方法拒绝。麻烦的是索引63和64的字符,.NET编码器使用+和/。并且需要填充,但这会产生另一个异常。

您需要改进错误记录以真正了解您正在处理的内容。