我有一个网址:
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
修复问题,问题是您将完整的 url 作为参数放置refurl
而没有对其进行编码。
因此,在您创建该 url 字符串的位置使用该UrlEncode()
函数,例如:
"http://www.abc.com?refurl=" + Server.UrlEncode(ReturnUrlParam)
在哪里
ReturnUrlParam="/english/info/test.aspx?form=1&h=test&s=AB";
对于这种特殊情况,您不应该使用 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=
以获得所需的输出。
我很确定框架中没有直接的方法可以满足您的特定要求,您必须在代码中实现它,并且也可以通过字符串操作来实现。
前段时间我也有类似的情况。我通过编码 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()
。
您应该将 替换&
为&
。