C # URL QueryString Проблема - PullRequest
       13

C # URL QueryString Проблема

1 голос
/ 03 января 2012

У меня есть проект WP7, в котором я использую приведенный ниже код. Обычно это работает нормально, но я получаю странный результат при прохождении некоторых определенных строк.

Service = "3q%23L3t41tGfXQDTaZMbn%23w%3D%3D?f"

NavigationService.Navigate(new Uri("/Details.xaml?service=" + Service, UriKind.Relative));

Следующая страница:

NavigationContext.QueryString.TryGetValue("service", out Service1);

Service1 сейчас = 3q # L3t41tGfXQDTaZMbn # w ==? F

Почему строка изменилась?

Ответы [ 3 ]

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

Вероятно, вам следует закодировать строку URL, если вы хотите, чтобы она прошла через невредимые.

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

Строка не изменилась, но вы смотрите на нее двумя различными способами.

Способ кодирования 3q#L3t41tGfXQDTaZMbn#w==?f для содержимого URI - 3q%23L3t41tGfXQDTaZMbn%23w%3D%3D?f.(На самом деле, это 3q%23L3t41tGfXQDTaZMbn%23w%3D%3D%3Ff, но вам не нравится, когда ? ближе к концу не экранирован до %3F в этом контексте.).

Ваше средство чтения строки, возвращает ее без экранирования.

Все работает очень хорошо, правда.

Когда вам нужно снова написать строку, тогда простоубежать снова:

Service = Uri.EscapeDataString(Service1);
2 голосов
/ 03 января 2012

В вашем первом фрагменте кода строка имеет кодированный URL.

Во втором фрагменте кода строка имеет декодированный URL.

По сути, это те же строки, только с примененной / удаленной кодировкой.

Например: urlencoding # вы получаете %23

Для дальнейшего чтения прочитайте эту статью в Википедии о кодировке .

Поскольку HttpUtility не является частью стека WP7 Silverlight, я рекомендую использовать Uri.EscapeUriString для экранирования любых URI, которые не были экранированы.

...