我有以下代码从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
。在解码之前,我需要在地址中使用它。我该怎么做?请注意,在某些情况下,对其进行编码会给出不同的值。
答案 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。
这有点脏,但应该可以正常工作。