在C#中,我如何构造和解析嵌套的查询字符串?

时间:2012-01-26 22:45:35

标签: c# query-string

我正在编写API,并希望人们能够提供Google Charts API调用作为参数。解析这个有问题的API调用的正确方法是什么,其中一个参数包含一个完全独立的API调用?

例如:

?method=createimage&chart1=https://chart.googleapis.com/chart?chs=250x100&chd=t:60,40&cht=p3&chl=Hello|World

在上面的示例中,我想将其视为(2)查询字符串键:方法 chart1 。我是否可以将上面的示例解析为2个查询字符串键,使Google Charts API调用保持原样,而不是将其分解?我可以将调用作为JSON或其他内容包围吗?

非常感谢!干杯

2 个答案:

答案 0 :(得分:6)

这是正确的方法(使用ParseQueryString方法):

using System;
using System.Web;

class Program
{
    static void Main()
    {
        var query = "?method=createimage&chart1=https://chart.googleapis.com/chart?chs=250x100&chd=t:60,40&cht=p3&chl=Hello|World";
        var values = HttpUtility.ParseQueryString(query);
        Console.WriteLine(values["method"]);
        Console.WriteLine(values["chart1"]);
    }
}

如果你想构造这个查询字符串:

using System;
using System.Web;

class Program
{
    static void Main()
    {
        var values = HttpUtility.ParseQueryString(string.Empty);
        values["method"] = "createimage";
        values["chart1"] = "https://chart.googleapis.com/chart?chs=250x100&chd=t:60,40&cht=p3&chl=Hello|World";
        Console.WriteLine(values);
        // prints "method=createimage&chart1=https%3a%2f%2fchart.googleapis.com%2fchart%3fchs%3d250x100%26chd%3dt%3a60%2c40%26cht%3dp3%26chl%3dHello%7cWorld"
    }
}

哦,顺便说一下,你在问题中显示的是一个无效的查询字符串,它由我显示的第二个代码片段的输出确认。您应该对chart1参数进行URL编码。在查询字符串中包含多个?字符绝对违反所有标准。

以下是正确的查询字符串的外观:

?method=createimage&chart1=https%3A%2F%2Fchart.googleapis.com%2Fchart%3Fchs%3D250x100%26chd%3Dt%3A60%2C40%26cht%3Dp3%26chl%3DHello%7CWorld

答案 1 :(得分:0)

您应该对查询字符串中的URL进行URL编码,因为它包含reserved characters。或者,十六进制编码也可以正常工作。

完成后,您可以单独处理这两个值,解析很简单。