我有一个代码,我在其中将电子邮件数据传递到另一个页面。电子邮件正文可能包含 HTML。
在第二页上,我观察到当"&"或"#"等进入正文内容时(从NavigationContext.QueryString.TryGetValue()
获取数据时),字符串中断和进一步的数据不会获得。
第一页上用于发送数据的代码:
string strParameters = string.Empty;
strParameters += "subject=" + objEmail.Subject;
strParameters += "&from=" + objEmail.FromAddress;
strParameters += "&to=";
for (int i = 0; i < objEmail.NumTo; i++)
{
strParameters += objEmail.GetToAddr(i) + "; ";
}
strParameters += "&cc=";
for (int i = 0; i < objEmail.NumCC; i++)
{
strParameters += objEmail.GetCcAddr(i) + "; ";
}
strParameters += "&body=" + objEmail.Body;
NavigationService.Navigate(new Uri("/PageReadMail.xaml?" + strParameters, UriKind.Relative));
第二页上用于接收数据的代码:
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
string strOriginalString = e.Uri.OriginalString;
//get data received from navigation service
string strBody = "";
string strSubject = "";
string strTo = "";
string strCc = "";
string strFrom = "";
NavigationContext.QueryString.TryGetValue("body", out strBody);
NavigationContext.QueryString.TryGetValue("subject", out strSubject);
NavigationContext.QueryString.TryGetValue("from", out strFrom);
NavigationContext.QueryString.TryGetValue("to", out strTo);
NavigationContext.QueryString.TryGetValue("cc", out strCc);
}
在这里,strBody
的数据不完整。
参数应为 URL 编码
应在 URI 的每个参数上使用HttpUtility.UrlEncode()
或Uri.EscapeDataString()
。或者,可以对整个 Uri 使用Uri.EscapeUriString()
。
Uri 的长度有限制
也许您的字符串更长并且正在修剪?虽然,我认为如果它更长,它只会抛出一个异常,而不是修剪它,但你应该检查一下。
最好将整个电子邮件对象传递给PageReadMail
我认为将整个电子邮件对象传递到页面会更容易、更安全,而不是将其转换为字符串并在 Uri 中传递。
只需将类型为 YourEmailObjectType
的静态属性添加到 PageReadMail
类,并在导航到页面之前设置该属性。导航后,从该属性(而不是导航 Uri)获取电子邮件的数据。
您可以只替换字符("&"和"#"):
strParameters += "&body=" + objEmail.Body.Replace("&", "%26").Replace("#", "%23");