如何获取具有多个参数的查询字符串

时间:2013-02-11 07:30:55

标签: c# asp.net url

我有一个网址:

http://www.abc.com?refurl=/english/info/test.aspx?form=1&h=test&s=AB

如果我使用

Request.QueryString["refurl"

但是给了我

/english/info/test.aspx?form=1

相反,我需要完整的网址

/english/info/test.aspx?form=1&h=test&s=AB

4 个答案:

答案 0 :(得分:3)

解决问题,问题是您将完整的网址作为参数refurl放置而不对其进行编码。

因此,在创建该url字符串的位置使用UrlEncode()函数,例如:

"http://www.abc.com?refurl=" + Server.UrlEncode(ReturnUrlParam)

其中
ReturnUrlParam="/english/info/test.aspx?form=1&h=test&s=AB";

答案 1 :(得分:1)

对于那个特例,你不应该使用QueryString,(因为你的查询字符串包含三个参数),而而不是Uri类,而Uri.Query会给你要求的结果。

Uri uri  = new Uri(@"http://www.abc.com?refurl=/english/info/test.aspx?form=1&h=test&s=AB");
string query = uri.Query;

哪个会给你:

?refurl=/english/info/test.aspx?form=1&h=test&s=AB

稍后您可以移除?refurl=以获得所需的输出。

我很确定框架中没有直接的方法来满足您的特定需求,您必须在代码中实现这一点,并且使用字符串操作也是如此。

答案 2 :(得分:1)

前段时间我的情况类似。 我通过编码refurl值解决了它。 现在我的网址看起来与那个类似: http://www.abc.com?refurl=adsf45a4sdf8sf18as4f6as4fd

我创建了两种方法:

public string encode(string);
public string decode(string);

在重定向或您拥有链接之前,您可以对链接进行简单编码以及在何处阅读,在使用前进行解码:

Response.redirect(String.Format("http://www.abc.com?refurl={0}", encode(/english/info/test.aspx?form=1&h=test&s=AB));

在您使用refurl的页面中:

 $refUrl = Request.QueryString["refurl"];
 $refUrl = decode($refUrl);

编辑: 编码/解码方法我实际上作为扩展方法,然后对于每个字符串,我只需使用string.encode()string.decode()

答案 3 :(得分:0)

您应该将&替换为&