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

146

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

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

my.aspx?val=%2Fxyz2F
Том
источник

Ответы:

107
Server.UrlDecode(xxxxxxxx)
TheVillageIdiot
источник
1
какое пространство имен?
Полина-с
1
@PolinaC System.Web.HttpServerUtilityBase, но это уже должно быть импортировано в ASP.NET MVC.
Филнор
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");
Canavar
источник
21

Пытаться:

var myUrl = "my.aspx?val=%2Fxyz2F";
var decodeUrl = System.Uri.UnescapeDataString(myUrl);
Матеус Миранда
источник