У меня есть ситуация, когда мне нужно поместить URL внутри переменной GET. например:
'http://www.site.com/StepOne?b=1&afterUrl=http://www.site.com/StepTwo?someVar=text&b=1'
В этом случае, когда яam в StepOne значение параметра b будет 1,1, а не 1, как ожидалось.afterUrl параметр будет:
StepOne
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() значение.
UrlEncode()
например
var url = String.Format("http://www.site.com/StepOne?b={0}&afterUrl={1}", b, Server.UrlEncode(afterUrl));
Попробуйте использовать HttpUtility.UrlEncode() для AfterURL
HttpUtility.UrlEncode()
AfterURL
( РЕДАКТИРОВАТЬ или Server.URLEncode(), как указали другие)
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).Оттуда вы можете Response.redirect или все, что вы хотите с сохраненным после URL.
HttpUtility.UrlDecode(AfterURL variable name)
Проще говоря, вам нужно URL-кодирование параметра afterUrl (на самом деле, вы должны URL-кодировать все параметры, передаваемые на сервер), что превратит "http://www.site.com/StepTwo?someVar=text&b=1" в" http% 3A% 2F% 2Fwww .site.com% 2FStepTwo% 3FsomeVar% 3Dtext% 26b% 3D1 ", что не повлияет на набор параметров. Почти любой серверный каркас на рынке автоматически декодирует его обратно в строку" http://www.site.com/StepTwo?someVar=text&b=1", или в хотя бы дать вам функцию сделать это самостоятельно.
EDIT:
Как показывает этот вопрос SO , можно закодировать строку URL без использования System.Web, используя System.Net.Uri.EscapeDataString().
System.Net.Uri.EscapeDataString()
Используйте Server.UrlEncode на someVar, чтобы экранировать значения строки запроса перед тем, как поместить его в ссылку. Вам может понадобиться использовать Server.UrlDecode на другой стороне, чтобы преобразовать его обратно в исходные символы.