为什么字符串在作为QueryString传递时改变自己?

本文关键字:改变自己 QueryString 字符串 为什么 | 更新日期: 2023-09-27 18:17:34

我在做一个基于Windows Phone 7.5的项目。

我有页面1传递URL作为QueryString。e.Value.ToString()是http://xiciimgs.xici.net/d189532038.0/001_7384_%B8%B1%B1%BE_%B8%B1%B1%BE_s.jpg,这是正确的字符串。

    private void myWB1_ScriptNotify(object sender, NotifyEventArgs e)
    {
        string passingURL = e.Value.ToString();
        if (!String.IsNullOrEmpty(passingURL)) 
        {
           App.goToPage("/PictureViewPage.xaml?pictureurl=" + passingURL);
        }
    }

在第2页,我尝试通过下面的代码获得URL,

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        string strUrl = "";
        base.OnNavigatedTo(e);
        NavigationContext.QueryString.TryGetValue("pictureurl", out strUrl);
        strUrl = Uri.EscapeUriString(strUrl);
    }

在TryGetValue之后,strUrl是"http://xiciimgs.xici.net/d189532038.0/001_7384_±¾_±¾_ _±¾_s.jpg", Uri之后是

。EscapeUriString, strUrl结果是"http://xiciimgs.xici.net/d189532038.0/001_7384_%C2%B8%C2%B1%C2%B1%C2%BE_%C2%B8%C2%B1%C2%B1%C2%BE_s.jpg"

App.gotoPage除了导航什么也没做

    public static void goToPage(string targetUri)
    {
        var rootFrame = (App.Current as App).RootFrame;
        rootFrame.Navigate(new System.Uri(targetUri, System.UriKind.Relative));
    }

我的问题是为什么会发生这种情况以及如何获得正确的url?

为什么字符串在作为QueryString传递时改变自己?

终于找到了问题,
Uri。EscapeUriString首先传递值,以避免导航过程中出现格式异常。

private void myWB1_ScriptNotify(object sender, NotifyEventArgs e)
{
    string passingURL = e.Value.ToString();
    passingURL = Uri.EscapeUriString(passingURL);
    if (!String.IsNullOrEmpty(passingURL)) 
    {
       App.goToPage("/PictureViewPage.xaml?pictureurl=" + passingURL);
    }
}