C # - декодирование строки не возвращает оригинальную закодированную - PullRequest
0 голосов
/ 08 января 2019

У меня есть случайная сгенерированная строка, которую мне нужно поместить в URL, поэтому я кодирую ее так:

var encodedToken = System.Web.HttpUtility.UrlEncode(token, System.Text.Encoding.UTF8);

В методе действия ASP.NET я получаю этот токен и декодирую его:

var token = System.Web.HttpUtility.UrlDecode(encodedToken, System.Text.Encoding.UTF8);

но эти токены не совпадают. Например, строка ab+cd будет закодирована в ab%2bcd, а декодирование результата даст мне строку ab cd (символ плюса изменен на пробел).

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

Как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

В вашем контексте кажется, что вам не нужно вызывать UrlDecode (поскольку %2b декодирует до +, а + декодирует до пустого пространства - то есть у вас есть двойное декодирование).

Учитывая, что фреймворк уже расшифровал его для вас, вы можете отказаться от использования UrlDecode.

0 голосов
/ 08 января 2019

Согласно документации Microsoft:

Вы можете кодировать URL, используя метод UrlEncode или метод UrlPathEncode. Однако методы возвращают разные результаты. Метод UrlEncode преобразует каждый пробел в символ плюс (+). Метод UrlPathEncode преобразует каждый символ пробела в строку «% 20», которая представляет пробел в шестнадцатеричной записи. Используйте метод UrlPathEncode при кодировании части пути URL-адреса, чтобы гарантировать согласованный декодированный URL-адрес независимо от того, какая платформа или браузер выполняет декодирование.

https://docs.microsoft.com/en-us/dotnet/api/system.web.httputility.urlencode?view=netframework-4.7.2

...