【发布时间】:2010-10-13 04:43:23
【问题描述】:
我需要用 C# 中的查询字符串构建一个 URL。这样做的最佳方法是什么?现在,我正在使用类似的东西,
string url = String.Format("foo.aspx?{0}={1}&{2}={3}", "a", 123, "b", 456);
有更好的首选方法吗?
【问题讨论】:
我需要用 C# 中的查询字符串构建一个 URL。这样做的最佳方法是什么?现在,我正在使用类似的东西,
string url = String.Format("foo.aspx?{0}={1}&{2}={3}", "a", 123, "b", 456);
有更好的首选方法吗?
【问题讨论】:
我已经为这类事情编写了一个简洁的小型开源库。查看WebBuddy,尤其是UriBuddy。二进制文件适用于 Silverlight,但您可以轻松地 browse the source 并撕下您需要的任何内容。
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 库具有与我的非常相似的内置函数。
【讨论】:
我认为您应该在每个参数上使用 Server.UrlEncode,这样您就不会在 URL 中发送任何错误字符。
【讨论】:
我认为这是一个很好的方法,如果它总是知道你有什么参数,如果当时不知道你可以总是保留一个 List
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);
}
注意:代码未经测试,也未编译,因此可能无法完全按原样工作。
【讨论】: