【问题标题】:QueryString Out of Encoded URLQueryString 超出编码 URL
【发布时间】:2015-05-14 04:27:34
【问题描述】:

我有一个编码的 URL。

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

我正在尝试从“Tomato”的 url 中获取查询字符串。我正在使用以下代码,但它返回 null。

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

【问题讨论】:

  • 当然它返回 null - URL 是完全编码的。您需要先对其进行解码。您还应该修复 http:// 部分:http%3a%2f%2fmyurl.test.me%2fSometjing%2fProduct%2fSearch%3fq=Tomato

标签: c# asp.net-mvc


【解决方案1】:

您缺少几个步骤。需要对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=番茄

【讨论】:

  • @johndoe:没问题,很乐意提供帮助。
【解决方案2】:

网址需要先解码才能使用HttpUtility.ParseQueryString()

虽然直接从 MSDN 中提及,但还是有公平的警告。

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

【讨论】:

    猜你喜欢
    • 2011-10-16
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 2023-03-12
    • 2011-07-05
    • 1970-01-01
    相关资源
    最近更新 更多