如何从编码的URL中获取参数?

时间:2017-01-25 21:10:45

标签: c# system.web

我有以下代码从URL获取参数及其键:

string queryString = new Uri(URL).Query;
var queryDictionary = System.Web.HttpUtility.ParseQueryString(queryString);

var paramsList = new Dictionary<string, string>();

foreach (var parameter in queryDictionary)
{
     var key = (string)parameter;
     var value = System.Web.HttpUtility.ParseQueryString(queryString).Get(key);
}

它完美无缺。例外,在value中,我有decoded value。在解码之前,我需要在地址中使用它。我该怎么做?请注意,在某些情况下,对其进行编码会给出不同的值。

2 个答案:

答案 0 :(得分:1)

编码发生在您的第一行:

string queryString = new Uri(URL).Query;

据推测,您希望避免编写自己的代码来从URL中提取Query部分。这是明智的。您仍然可以依赖Uri类为您进行解析:

var uri=new Uri(URL);
var queryString= URL.Replace(uri.GetLeftPart(UriPartial.Path), "").TrimStart('?');

-----------------------------------

var URL="http://a/b/?d= @£$%% sdf we  456 7 5?367";
var uri=new Uri(URL);
Console.WriteLine(uri.Query); // Already url-encoded by the Uri constructor
var queryString = URL.Replace(uri.GetLeftPart(UriPartial.Path), "").TrimStart('?');
Console.WriteLine(System.Web.HttpUtility.ParseQueryString(queryString)); //Not encoded!

(另外,LinqPad有帮助)

答案 1 :(得分:0)

这样做的一种可能方法是将其编码回来:

var encodedValue = HttpUtility.UrlEncode(value);

当您访问查询字符串时,ASP.NET会自动调用HttpUtility.UrlDecode。

这有点脏,但应该可以正常工作。