更改System.Uri的端口

时间:2011-05-26 11:25:52

标签: c# .net uri

所以我有这个Uri对象,其中包含一个地址,如http://localhost:1000/blah/blah/blah。我需要更改端口号并保留地址的所有其他部分。假设我需要http://localhost:1080/blah/blah/blah

Uri对象几乎是不可变的,所以我可以通过Port属性访问端口号,但它是只读的。是否有任何理智的方式来创建一个Uri对象完全像另一个但具有不同的端口?通过“理智”,我的意思是“没有乱用正则表达式和字符串操作”,因为虽然上面的例子它是微不足道的,它仍然闻起来像一罐蠕虫给我。如果这是唯一的方法,我真的希望它已经由某人实施,并且有一些帮助者可能(我没有发现任何)

提前致谢。

2 个答案:

答案 0 :(得分:46)

您是否考虑过UriBuilder课程?

http://msdn.microsoft.com/en-us/library/system.uribuilder.aspx

UriBuilder类提供了一种方便的方法来修改Uri实例的内容,而无需为每次修改创建新的Uri实例。

UriBuilder属性提供对只读Uri属性的读/写访问权限,以便可以修改它们。

答案 1 :(得分:41)

我对UriBuilder投了第二票。我实际上有一个用于更改URI端口的扩展方法:

public static class UriExtensions {
    public static Uri SetPort(this Uri uri, int newPort) {
        var builder = new UriBuilder(uri);
        builder.Port = newPort;
        return builder.Uri;
    }
}

用法:

var uri = new Uri("http://localhost:1000/blah/blah/blah");
uri = uri.SetPort(1337); // http://localhost:1337/blah/blah/blah