一尘不染

如何在C#中为URL建立查询字符串?

c#

从代码调用Web资源时的常见任务是构建查询字符串以包含所有必要的参数。虽然绝对不是火箭科学,但是您需要处理一些漂亮的细节,例如,&如果不是第一个参数,则附加一个参数,对参数进行编码等。

要做的代码很简单,但是有点乏味:

StringBuilder SB = new StringBuilder();
if (NeedsToAddParameter A) 
{ 
  SB.Append("A="); SB.Append(HttpUtility.UrlEncode("TheValueOfA")); 
}

if (NeedsToAddParameter B) 
{
  if (SB.Length>0) SB.Append("&"); 
  SB.Append("B="); SB.Append(HttpUtility.UrlEncode("TheValueOfB")); }
}

这是一项如此常见的任务,人们期望存在一个实用程序类,该实用程序类将使其更加优雅和可读。扫描MSDN时,我找不到一个,这使我想到以下问题:

您做上述事情时最优雅的清洁方式是什么?


阅读 186

收藏
2020-05-19

共1个答案

一尘不染

如果您深入研究QueryString属性是一个NameValueCollection。做完类似的事情后,我通常会对序列化和反序列化感兴趣,因此我的建议是建立一个NameValueCollection,然后传递给:

using System.Linq;
using System.Web;
using System.Collections.Specialized;

private string ToQueryString(NameValueCollection nvc)
{
    var array = (
        from key in nvc.AllKeys
        from value in nvc.GetValues(key)
            select string.Format(
                "{0}={1}",
                HttpUtility.UrlEncode(key),
                HttpUtility.UrlEncode(value))
        ).ToArray();
    return "?" + string.Join("&", array);
}

我想在LINQ中也有一种超级优雅的方式来做到这一点…

2020-05-19