替换查询字符串中的项目

Kar*_*ten 14 c# asp.net query-string

我有一个URL也可能有一个查询字符串部分,查询字符串可能是空的或有多个项目.

我想替换查询字符串中的一个项目,或者如果该项目尚不存在则添加它.

我有一个带有完整URL的URI对象.

我的第一个想法是使用正则表达式和一些字符串魔法,应该这样做.

但它似乎有点摇摇欲坠,也许框架有一些查询字符串构建器类?

Chr*_*ris 42

我发现这是一个更优雅的解决方案

var qs = HttpUtility.ParseQueryString(Request.QueryString.ToString());
qs.Set("item", newItemValue);
Console.WriteLine(qs.ToString());
Run Code Online (Sandbox Code Playgroud)


psu*_*lek 19

让我们有这个网址: https://localhost/video?param1=value1

首先将特定查询字符串参数更新为新值:

var uri = new Uri("https://localhost/video?param1=value1");
var qs = HttpUtility.ParseQueryString(uri.Query);
qs.Set("param1", "newValue2");
Run Code Online (Sandbox Code Playgroud)

接下来创建UriBuilder并更新Query属性以生成具有更改的参数值的新uri.

var uriBuilder = new UriBuilder(uri);
uriBuilder.Query = qs.ToString();
var newUri = uriBuilder.Uri;
Run Code Online (Sandbox Code Playgroud)

现在你有newUri这个价值: https://localhost/video?param1=newValue2

  • 无需创建单独的`Uri`对象.我们可以这样做:`var uriBuilder = new UriBuilder("https:// localhost/video?param1 = value1"); var qs = HttpUtility.ParseQueryString(uriBuilder.Query); qs.Set("param1","newValue2"); uriBuilder.Query = qs.ToString(); var newUri = uriBuilder.Uri;` (4认同)

小智 5

我使用以下方法:

    public static string replaceQueryString(System.Web.HttpRequest request, string key, string value)
    {
        System.Collections.Specialized.NameValueCollection t = HttpUtility.ParseQueryString(request.Url.Query);
        t.Set(key, value);
        return t.ToString();
    }
Run Code Online (Sandbox Code Playgroud)


knu*_*nut 4

也许你可以使用这个System.UriBuilder课程。它有一个Query属性。

  • 这似乎没什么用。Karsten 已经拥有的 URI 对象在其 Query 属性中具有相同的信息。我不确定为什么这么多人对此投了赞成票,也不知道为什么这是公认的答案。我错过了什么吗? (5认同)
  • /sf/ask/1016245891/ 这个答案更好。 (3认同)
  • 这没有用,Query 属性只是一个字符串 (2认同)
  • 这是一个没有答案的问题。 (2认同)