我需要在C#中使用查询字符串构建一个URL。这样做的最佳方法是什么?现在,我正在使用类似的东西,
string url = String.Format("foo.aspx?{0}={1}&{2}={3}", "a", 123, "b", 456);
有更好的首选方法吗?
答案 0 :(得分: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);
}
注意:代码未经过测试且尚未编译,因此可能无法完全正常工作。
答案 1 :(得分:5)
我认为您应该在每个参数上使用Server.UrlEncode,这样您就不会在URL中发送任何错误字符。
答案 2 :(得分:1)
我为这些事情编写了一个简洁的小型开源库。查看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库具有与我的非常相似的内置函数。