C#中的URL构建

4

我需要在C#中构建一个带有查询字符串的URL。最好的方法是什么?目前,我正在使用类似以下的代码:

string url = String.Format("foo.aspx?{0}={1}&{2}={3}", "a", 123, "b", 456);

有更好、更优选的方法吗?
3个回答

5

我认为,如果您始终知道有哪些参数,那么这是一个很好的方法。如果此时不知道参数,则可以始终使用List<KeyValuePair<string,string>>进行保存,其中键是名称,值是值,然后使用foreach循环构建查询字符串。

StringBuilder sb = new StringBuilder();
foreach(KeyValuePair<string,string> q in theList)
{
 // build the query string here.
    sb.Append(string.format("{0}={1}&", q.Key, q.Value);
}

注意:该代码未经测试和编译,因此可能不会完全按照预期工作。


这正是我喜欢的方式。你还可以将其封装在一个函数中,该函数接受Dictionary<string, string>或更好的<string, object>。 - Migol
在拼接之前,键和值需要进行URL参数编码。 - bobince

5

我认为你应该在每个参数上使用Server.UrlEncode,这样就不会在URL中发送任何不良字符。


1

我写了一个非常好用的开源库,专门用于这些类型的事情。请查看WebBuddy,特别是UriBuddy。二进制文件适用于Silverlight,但您可以轻松浏览源代码并提取所需内容。

以下是如何调用UriBuddy:

// Take a base url
Uri sample = new Uri("http://www.nytimes.com");

// some highly useful parameters
Dictionary<String, String> query = new Dictionary<string, string>
{
    {"param1","nice"},
    {"param2","code man"}

};


// create a new url using a chained style of coding
Uri newSample = sample
    .AppendPath("/pages/world")
    .AppendQueryValues(query);

顺便说一下,我在Silverlight之外从未做过这种事情。我相当确定“真正”的.NET库有内置的函数,看起来非常类似于我的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接