将键值对附加到查询字符串

大卫

我想通过格式化常规字符串,然后将其附加到当前查询字符串中,将多个查询字符串键值对添加到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被覆盖。所以我的问题是:如何使这项工作有效,以便可以将两个键值对都附加到查询字符串?

大卫

我找到了有关堆栈溢出的答案,该答案对我有帮助:

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

虽然,我还需要检查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);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将查询字符串附加到iframe源

来自分类Dev

使用 jquery 将值附加到查询字符串

来自分类Dev

如何将键值附加到一个简单的字符串数组?

来自分类Dev

Python将*。*附加到字符串

来自分类Dev

将片段附加到字符串

来自分类Dev

将变量附加到字符串

来自分类Dev

有条件地将查询字符串附加到有角度的href

来自分类Dev

如何自动将查询字符串附加到laravel分页链接?

来自分类Dev

Fancybox 3 ajax类型自动将查询字符串fancybox = true附加到实际URL

来自分类Dev

将查询字符串参数附加到对象的URL的最佳方法

来自分类Dev

将查询字符串附加到预构建的URI(C#,Unity3D)

来自分类Dev

通过将查询字符串附加到URL来重定向到该URL

来自分类Dev

.htaccess重写,原始请求附加到查询字符串

来自分类Dev

用相同的键附加到查询字符串

来自分类Dev

将标记字符串附加到BeautifulSoup中的标签

来自分类Dev

将char附加到rust的字符串中

来自分类Dev

Python将附加到列表中的字符串元素

来自分类Dev

无法将字符串附加到字典键

来自分类Dev

PHP将链接附加到字符串

来自分类Dev

将文本附加到完整的html字符串

来自分类Dev

将字符串附加到代码片段中的单词

来自分类Dev

函数将字符串附加到表中

来自分类Dev

每次出现时将int附加到字符串

来自分类Dev

如何将分号(;)附加到cmake字符串

来自分类Dev

将json字符串附加到文件

来自分类Dev

如何将属性附加到字符串?

来自分类Dev

无法将字符串附加到字典键

来自分类Dev

将char附加到rust的字符串中

来自分类Dev

如何将字符串内容附加到数组