.net 更改System.uri的端口

pftdvrlh  于 2022-12-01  发布在  .NET
关注(0)|答案(2)|浏览(146)

我有一个Uri对象,其中包含一个地址,类似于http://localhost:1000/blah/blah/blah。我需要更改端口号,并保持地址的所有其他部分不变。假设我需要它是http://localhost:1080/blah/blah/blah
Uri对象基本上是不可变的,所以我可以通过Port属性访问端口号,但它是只读的。有没有合理的方法可以创建一个与另一个对象完全相同但端口不同的Uri对象?我所说的“合理”是指“不用使用正则表达式和字符串操作”,因为尽管对于上面的示例来说这很简单,如果这是唯一的方法,我真的希望它已经被某人实现了,也许有一些帮手在那里(虽然我没有找到)。

bfrts1fy

bfrts1fy1#

您是否考虑过UriBuilder类?
http://msdn.microsoft.com/en-us/library/system.uribuilder.aspx
UriBuilder类提供了一种方便的方法来修改Uri示例的内容,而不必为每次修改创建新的Uri示例。
UriBuilder属性提供对只读Uri属性的读/写访问,以便可以修改这些属性。

wlsrxk51

wlsrxk512#

我支持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

相关问题