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
,而不是预期的1
。afterUrl
参数将为:
'http://www.site.com/StepTwo?someVar=text'
而不是这个:
'http://www.site.com/StepTwo?someVar=text&b=1'
如何隔离afterUrl
参数,使其自己的GET变量不会影响整个URL。
创建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编码。