如何使用C#解码URL参数?


146

如何使用C#解码编码的URL参数?

例如,使用以下URL:

my.aspx?val=%2Fxyz2F

Answers:


107
Server.UrlDecode(xxxxxxxx)

1
哪个名称空间?
polina-c

1
@PolinaC System.Web.HttpServerUtilityBase,但是应该已经将其导入ASP.NET MVC中。
菲诺

288
string decodedUrl = Uri.UnescapeDataString(url)

要么

string decodedUrl = HttpUtility.UrlDecode(url)

一次呼叫无法完全解码网址。要完全解码,您可以循环调用以下方法之一:

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

13
Uri.UnescapeDataString(url)thanx
themhz 2012年

@ogi谢谢你!我不知道仅用一个电话就不能完全正常工作!我跑了Uri.UnescapeDataString两次,得到了我想要的!:D
C0NFUS3D 2013年

2
恕我直言,它比正确的答案要好,因为您的第一个建议也适用于便携式类库(PCL)
Daniel Veihelmann

2
最佳答案!但在完全解码之前,请考虑参数的嵌套方式。例如,参数值可以是一个编码的URL,而该URL本身又具有另一个编码的URL的参数。如果您一次性对其进行了完全解码,则您将无法分辨出什么。就像将所有parens从代数语句中抽出一样。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");

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.