【问题标题】:Append key value pairs to query string将键值对附加到查询字符串
【发布时间】:2015-01-23 07:53:47
【问题描述】:

我想通过格式化常规字符串然后将其附加到当前查询字符串来将多个查询字符串键值对添加到 url。因为,据我所知,无法更改实际的 Request.QueryString。因此,我尝试将 kvp:s 附加到查询字符串中,如下所示。我搜索了 StackOverflow,但找不到与我的问题相符的答案。

protected void ServiceSelectionChanged(object sender, EventArgs e)
{
    var regNr = registrationNumber.Text;
    var selectedServiceType = SelectedServiceType.ToString("D");

    string url = string.Empty;
    BookingHelpers.FormatQueryStringUrl(this.Request, "serviceType", selectedServiceType, ref url);
    BookingHelpers.FormatQueryStringUrl(this.Request, "regNr", regNr, ref url);
    Server.Transfer(url, false);
}

public static void FormatQueryStringUrl(HttpRequest request, string key, string value, ref string url)
{
    if (string.IsNullOrEmpty(url))
    {
        url = request.Url.PathAndQuery; 
    }
    if (url.Contains("?"))
    {
        if (url.Contains("&" + key))
        {
            string currentValue = request.QueryString[key];
            url = url.Replace("&" + key + "=" + currentValue, "&" + key + "=" + value);
        }
        else
        {
            url = String.Format(request.Url.PathAndQuery + "&" + key + "={0}", value);
        }
    }
    else url = String.Format(request.Url.PathAndQuery + "?" + key + "={0}", value);
}

然而,这每次都使用 Request.QueryString,所以第一个 kvp 被覆盖。所以我的问题是:我怎样才能使这个工作,以便我可以将两个键值对附加到查询字符串?

【问题讨论】:

  • 如果字符数较少,为什么不能构造一个对象并将其序列化并作为 JSON 字符串发送..
  • 我不明白你的意思,对不起。

标签: c# webforms query-string


【解决方案1】:

我找到了一个帮助我的堆栈溢出答案:

How to build a query string for a URL in C#?

不过,我还需要检查 url 中是否已经有查询字符串,所以我将其修改为类似的内容。

public static string ToQueryString(string url, NameValueCollection nvc)
    {
        StringBuilder sb;

        if (url.Contains("?"))
            sb = new StringBuilder("&");
        else
            sb = new StringBuilder("?");

        bool first = true;

        foreach (string key in nvc.AllKeys)
        {
            foreach (string value in nvc.GetValues(key))
            {
                if (!first)
                {
                    sb.Append("&");
                }

                sb.AppendFormat("{0}={1}", Uri.EscapeDataString(key), Uri.EscapeDataString(value));

                first = false;
            }
        }

        return url + sb.ToString();
    }

而用法改为:

var queryParams = new NameValueCollection() 
{
    { "isaServiceType", selectedIsaServiceType },
    { "regNr", regNr }
};

var url = ToQueryString(Request.Url.PathAndQuery, queryParams);

【讨论】:

    猜你喜欢
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多