2012-11-06 48 views
1

我有以下格式的URL:获得来自URL的查询字符串全在ASP.NET

http://www.mysite.com/login.aspx?ref=~/Module/MyPage.aspx?par=1&par2=hello&par3=7 

我用QueryStringRedirect用户返回到页面的他在登录前的内容。为了保持页面的状态,我需要QueryString中的参数。参数数量根据调用Login及其状态的Page而改变。

比方说,我想在ref中的redirectURL变量中存储URL中的所有内容。我想:

redirectURL = Request.QueryString("ref") // "~/Module/MyPage.aspx?par=1" 

它得到的一切ref之后,但忽略了&(含)之后的一切。如果我使用:

redirectURL =Request.Url.Query // "ref=~/Module/MyPage.aspx?par=1&par2=hello&par3=7" 

它得到一切,包括ref。为了实现我的目标,我只需要从redirectURL中删除前4个字符。但我认为这个解决方案有点“被迫”,我相信应该有一些ASP.NET功能来完成这个任务。

回答

1

&在你的URL创建额外的查询字符串参数。

在将它放入查询字符串中之前,您需要先跳过ref参数的值。
这将取代& s与%26
要这样做,请致电Uri.EscapeDataString()

当您从Request.QueryString获取属性时,它会自动解码它。

1

考虑编码“~/Module/MyPage.aspx?par=1&par2=hello&par3=7”,然后再将它传递给url。

例如:

String MyURL = "http://www.mysite.com/login.aspx?ref=" + 
       Server.UrlEncode("~/Module/MyPage.aspx?par=1&par2=hello&par3=7"); 

然后,你可以用得到的redirectUrl:

String redirectURL = Request.QueryString("ref"); 
+3

编号'Request.QueryString'为您解码。 – SLaks

+0

@SLaks谢谢指出。 –