ASP.NET отправляет GET-переменную с URL-адресом внутри - PullRequest
1 голос
/ 23 января 2012

У меня есть ситуация, когда мне нужно поместить 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 параметр будет:

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

вместо этого:

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

Как изолировать параметр afterUrl, чтобы его собственные переменные GET не влияли на весь URL.

Ответы [ 4 ]

2 голосов
/ 23 января 2012

При создании параметра afterUrl URL обязательно UrlEncode() значение.

например

var url = String.Format("http://www.site.com/StepOne?b={0}&afterUrl={1}", b, Server.UrlEncode(afterUrl));
1 голос
/ 23 января 2012

Попробуйте использовать HttpUtility.UrlEncode() для AfterURL

( РЕДАКТИРОВАТЬ или 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.

0 голосов
/ 23 января 2012

Проще говоря, вам нужно 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().

0 голосов
/ 23 января 2012

Используйте Server.UrlEncode на someVar, чтобы экранировать значения строки запроса перед тем, как поместить его в ссылку. Вам может понадобиться использовать Server.UrlDecode на другой стороне, чтобы преобразовать его обратно в исходные символы.

...