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

C# ASP.NET提交一个包含URL的GET变量,c#,.net,url,urlencode,C#,.net,Url,Urlencode,在这种情况下,我需要将url放入GET变量中。 例如: "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?some

在这种情况下,我需要将url放入GET变量中。
例如:

"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使用
HttpUtility.UrlEncode()

EDIT
Server.URLEncode()
正如其他人所指出的)


然后,当您最后点击“Stephone”页面时,您可以使用
HttpUtility.UrlDecode(AfterURL变量名)
。从那里,您可以使用Response.redirect或任何您想要的保留后url。

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

非常简单,您需要对
afterUrl
参数进行URL编码(实际上,您应该对传递给服务器的所有参数进行URL编码),这将把“”转换为“http%3A%2F%2Fwww.site.com%2fstep2%3FsomeVar%3Dtext%26b%3D1”,这不会影响参数集。市场上几乎任何服务器框架都会自动将其解码回字符串“”,或者至少为您自己提供一个这样做的功能

编辑:


如图所示,可以使用
System.Net.Uri.EscapeDataString()

在创建
afterUrl
URL参数时,不使用System.Web对字符串进行URL编码,请确保该值为

e、 g


您能否详细说明原因和方法,以便阅读者了解他们在做什么?
HttpUtility
的问题在于它位于System.Web.dll中,通常仅适用于ASP.NET项目。@ToddBFisher-Umm。。。
Server
不是
HttpServerUtility
的一个实例吗?它也只在
System.Web.dll
中提供?@AndrewBarber:我从来没有把这两者放在一起,谢谢你提醒我。
"http://www.site.com/StepOne?b=1&afterUrl=" + 
HttpUtility.UrlEncode(http://www.site.com/StepTwo?someVar=text&b=1");
var url = String.Format("http://www.site.com/StepOne?b={0}&afterUrl={1}", b, Server.UrlEncode(afterUrl));