如何正确更改URL参数

本文关键字:URL 参数 何正确 | 更新日期: 2023-09-27 18:02:26

首先让我解释一下我所说的"适当"是什么意思:我发现了很多方法,但其中大多数最终都会使用字符串操作之类的东西。我想知道是否有一个简单的方法来做这样的使用内置函数。

到目前为止,我用string myNewValue改变了URL的参数:

Uri myUri = new Uri(URL);
var qs = HttpUtility.ParseQueryString(myUri.Query);
qs["ParameterName"] = myNewValue;

这确实工作得很好。现在我想让我的URL回到string,带着这些新参数。正确的做法是什么?像获得URL没有模式从我的原始字符串和合并获得的参数?

注意:到目前为止,我能够用Substring这样做,我只是发现它"不干净"当一个人开始在字符串中找到Substring的东西。

我怎么做很简单。从我原来的URL我子字符串到"?",然后我结合qs.ToString()

如何正确更改URL参数

UriBuilder类是否为您提供足够的功率?它不会做所有事情(特别是,它不会构建路径),但缺失的部分很容易填补。例如,KeyValuePair<string, string>的默认ToString可以很好地与string.Join():

配合使用。
var myUri = new Uri(url);
var qs = HttpUtility.ParseQueryString(myUri.Query);
qs["param1"] = "newVal1";
var path = string.Join("&", qs); // UriBuilder can't do this bit for you
// But it can put the bits back together and look after oddities,
// slashes, url encoding, etc.
var builder = new UriBuilder(myUri) {Path = path};
var newUri = builder.Uri;

为了使您的代码更加整洁,可以将其包装在如下的扩展方法中:

public static Uri SetAttribute(this Uri uri, string key, string value) {
  var qs = HttpUtility.ParseQueryString(uri.Query);
  qs[key] = value;
  return new UriBuilder(myUri) {Path = string.Join("&", qs)}.Uri;
}

原来的代码变成了:

Uri myUri = new Uri(URL);
myUri.SetAttribute("ParameterName") = myNewValue;