1

我有一个网址:

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

4 回答 4

3

修复问题,问题是您将完整的 url 作为参数放置refurl而没有对其进行编码。

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

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

在哪里
ReturnUrlParam="/english/info/test.aspx?form=1&h=test&s=AB";

于 2013-02-11T07:47:14.227 回答
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=以获得所需的输出。

我很确定框架中没有直接的方法可以满足您的特定要求,您必须在代码中实现它,并且也可以通过字符串操作来实现。

于 2013-02-11T07:35:37.990 回答
1

前段时间我也有类似的情况。我通过编码 reurl 值来解决它。现在我的网址看起来与那个相似: 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()or string.decode()

于 2013-02-11T07:39:15.557 回答
0

您应该将 替换&&

于 2013-02-11T07:35:29.113 回答