ASP.NET提交一个包含URL的GET变量

本文关键字:URL 包含 GET 变量 一个 提交 NET ASP | 更新日期: 2023-09-27 18:21:11

我有一种情况,需要在GET变量中放入一个url
例如:

'http://www.site.com/StepOne?b=1&afterUrl=http://www.site.com/StepTwo?someVar=text&b=1'

在这种情况下,当我处于StepOne时,b参数值将是1,1,而不是预期的1afterUrl参数将为:

'http://www.site.com/StepTwo?someVar=text'

而不是这个:

'http://www.site.com/StepTwo?someVar=text&b=1'

如何隔离afterUrl参数,使其自己的GET变量不会影响整个URL。

ASP.NET提交一个包含URL的GET变量

创建afterUrl URL参数时,请确保UrlEncode()为该值。

例如

var url = String.Format("http://www.site.com/StepOne?b={0}&afterUrl={1}", b, Server.UrlEncode(afterUrl));

考虑将HttpUtility.UrlEncode()用于AfterURL

EDIT或其他人指出的Server.URLEncode()

"http://www.site.com/StepOne?b=1&afterUrl=" + 
HttpUtility.UrlEncode(http://www.site.com/StepTwo?someVar=text&b=1");

然后,当你最终点击"StepOne"页面时,你可以使用HttpUtility.UrlDecode(AfterURL variable name)。从那里你可以使用保留的after url进行Response.redirect或任何你想要的操作。

在将someVar放入链接之前,使用Server.UrlEncode来转义它的查询字符串值。您可能需要在另一侧使用Server.UrlDecode将其转换回原始字符。

很简单,您需要对afterUrl参数进行URL编码(实际上,您应该对传递给服务器的所有参数进行URL加密)http://www.site.com/StepTwo?someVar=text&b=1"转换为"http%3A%2F%2Fwww.site.com%2FSteTwo%3SomeVar%3Dtext%26b%3D1",这不会影响参数集。市场上几乎任何服务器框架都会自动将其解码回字符串。"http://www.site.com/StepTwo?someVar=text&b=1",或者至少给你一个自己这样做的函数。

编辑:

正如这个SO问题所示,可以在不使用System.Web的情况下使用System.Net.Uri.EscapeDataString()对字符串进行URL编码。