Как мне декодировать параметр URL с помощью C #?


146

Как я могу декодировать закодированный параметр URL, используя C #?

Например, возьмите этот URL:

my.aspx?val=%2Fxyz2F

Ответы:



288
string decodedUrl = Uri.UnescapeDataString(url)

или

string decodedUrl = HttpUtility.UrlDecode(url)

URL не полностью расшифрован одним вызовом. Чтобы полностью декодировать, вы можете вызвать один из этих методов в цикле:

private static string DecodeUrlString(string url) {
    string newUrl;
    while ((newUrl = Uri.UnescapeDataString(url)) != url)
        url = newUrl;
    return newUrl;
}

13
Uri.UnescapeDataString (URL) спасибо
themhz

@ogi Спасибо за это! Я не знал, что это не полностью работает только с одним звонком! Я Uri.UnescapeDataStringдважды побежал и получил то, что хотел !! : D
C0NFUS3D

2
ИМХО лучше, чем предполагаемый ответ, потому что ваше первое предложение также работает в Portable Class Libaries (PCLs)
Даниэль Вейхельманн

2
лучший ответ! но подумайте, как ваши параметры вложены, прежде чем полностью декодировать. Например, значением параметра может быть закодированный URL-адрес, который сам по себе имеет параметр с другим закодированным URL-адресом. Если вы полностью расшифруете его за один раз, вы не сможете больше сказать, что было чем. это было бы все равно, что вырвать все слова из выражения алгебры. a = ((b + c) * d) если вы полностью удалите его, значение компонентов может быть потеряно a = b + c * d
DanO

2
UnescapeDataString недостаточно, поскольку он не будет обрабатывать несколько случаев (например, параметры в URL-адресе, которые содержат пробел, используют '+', но UnescapeDataString намеренно не преобразует их в пробелы). Uri обрабатывает больше, чем просто URL, так как вопрос касается URL, мы должны использовать HttpUtility.UrlDecode
Lorenz03Tx


23

Попробуй это:

string decodedUrl = HttpUtility.UrlDecode("my.aspx?val=%2Fxyz2F");

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.