QueryString Out of Encoded URL

时间:2015-05-13 20:19:02

标签: c# asp.net-mvc

我有一个编码的网址。

http%3a%2f%myurl.test.me%2fSometjing%2fProduct%2fSearch%3fq=Tomato

我正在尝试从网址中获取查询字符串,即" Tomato"。我使用以下代码但它返回null。

 var parsedQuery = HttpUtility.ParseQueryString((url));
            Console.Write(parsedQuery["q"]); // null 

2 个答案:

答案 0 :(得分:4)

你错过了几步。您需要解码URL,然后提取查询字符串,然后解析查询字符串:

string decoded = 
    HttpUtility.UrlDecode("http%3a%2f%2fmyurl.test.me%2fSometjing%2fProduct%2fSearch%3fq=Tomato");

var uri = new Uri(decoded);
var parsedQuery = HttpUtility.ParseQueryString(uri.Query);

Console.WriteLine (parsedQuery["q"]); // Tomato

此外,您的编码网址有点格式错误。你解码后的那个看起来像这样:

  

HTTP:/%myurl.test.me/Sometjing/Product/Search?q=Tomato

我认为您在2f之前的%之后错过了myurl.test

  

的http%3A%2F%2fmyurl.test.me%2fSometjing%2fProduct%2fSearch%3fq =番茄

答案 1 :(得分:0)

在您使用HttpUtility.ParseQueryString()之前,需要先解码网址。

虽然直接从MSDN提到了公平警告。

  

ParseQueryString方法使用可能包含用户输入的查询字符串,这是一种潜在的安全威胁。默认情况下,ASP.NET网页验证用户输入不包含脚本或HTML元素。 MSDN