我需要在C#中构建一个带有查询字符串的URL。最好的方法是什么?目前,我正在使用类似以下的代码:
string url = String.Format("foo.aspx?{0}={1}&{2}={3}", "a", 123, "b", 456);
有更好、更优选的方法吗?
我认为,如果您始终知道有哪些参数,那么这是一个很好的方法。如果此时不知道参数,则可以始终使用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);
}
注意:该代码未经测试和编译,因此可能不会完全按照预期工作。
我认为你应该在每个参数上使用Server.UrlEncode,这样就不会在URL中发送任何不良字符。
我写了一个非常好用的开源库,专门用于这些类型的事情。请查看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库有内置的函数,看起来非常类似于我的。