C# 仅修改超链接的路径部分';在C中导航#

C# 仅修改超链接的路径部分';在C中导航#,c#,.net-3.5,C#,.net 3.5,我想修改Hyperlink控件的NavigateUrl属性。我需要保留查询字符串,但更改超链接URL的路径 大致如下: var control = (Hyperlink) somecontrol; // e.g., control.NavigateUrl == "http://www.example.com/path/to/file?query=xyz" var uri = new Uri(control.NavigateUrl); uri.AbsolutePath = "/new/abso

我想修改
Hyperlink
控件的
NavigateUrl
属性。我需要保留查询字符串,但更改超链接URL的路径

大致如下:

var control = (Hyperlink) somecontrol; // e.g., control.NavigateUrl == "http://www.example.com/path/to/file?query=xyz" var uri = new Uri(control.NavigateUrl); uri.AbsolutePath = "/new/absolute/path"; control.NavigateUrl = uri.ToString(); // control.NavigateUrl == "http://www.example.com/new/absolute/path?query=xyz" var-control=(超链接)somecontrol; //例如,control.NavigateUrl==”http://www.example.com/path/to/file?query=xyz" var uri=新uri(control.NavigateUrl); uri.AbsolutePath=“/new/absolute/path”; control.NavigateUrl=uri.ToString(); //control.NavigateUrl==”http://www.example.com/new/absolute/path?query=xyz" 但是,
Uri.AbsolutePath
是只读的(),所以这个解决方案不起作用


在保留查询字符串、主机名和架构部分不变的情况下,如何仅更改
超链接
NavigateUrl
属性的路径?

您可以在第一个问号处拆分字符串,然后将新域与之连接起来。

您可能会发现该类很有用:

var oldUrl = "http://www.example.com/path/to/file?query=xyz";
var uriBuilder = new UriBuilder(oldUrl);
uriBuilder.Path = "new/absolute/path";
var newUrl = uriBuilder.ToString();
或者让它更通用一些:

public string ChangePath(string url, string newPath)
{
    var uriBuilder = new UriBuilder(url);
    uriBuilder.Path = newPath;
    return uriBuilder.ToString();
}
然后:

var control = (Hyperlink) somecontrol;
control.NavigateUrl = ChangePath(control.NavigateUrl, "new/absolute/path");

顺便说一句,我正在调查这一问题,作为中所述问题的可能解决方法。谢谢,成功了!但我最终不得不使用uriBuilder.Uri.PathAndQuery而不是uriBuilder.ToString()。有关更多信息,请参阅。