从代码调用 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,我没找到——这让我想到了以下问题:

你知道的最优雅的清洁方式是什么?

最佳答案

如果您深入了解,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 中也有一种 super 优雅的方式来做到这一点......

关于c# - 如何在 C# 中为 URL 构建查询字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/829080/

10-13 03:35