Подтвердить что ты не робот

Изменение порта System.Uri

Итак, у меня есть этот объект Uri, который содержит адрес, что-то вроде http://localhost:1000/blah/blah/blah. Мне нужно изменить номер порта и оставить все остальные части адреса неповрежденными. Скажем, мне нужно, чтобы это было http://localhost:1080/blah/blah/blah.

Объекты Uri в значительной степени неизменяемы, поэтому я могу получить доступ к номеру порта через свойство Port, но он доступен только для чтения. Есть ли разумный способ создания объекта Uri точно как другой, но с другим портом? Под "здравомыслящим" я подразумеваю "без беспорядка с регулярными выражениями и строковыми манипуляциями", потому что, хотя это тривиально для вышеприведенного примера, он по-прежнему пахнет ямой червей для меня. Если это единственный способ, я действительно надеюсь, что он уже реализован кем-то и есть некоторые помощники там, может быть (я их не нашел)

Спасибо заранее.

4b9b3361

Ответ 1

Рассматривали ли вы класс UriBuilder?

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

Класс UriBuilder предоставляет удобный способ изменения содержимого экземпляра Uri без создания нового экземпляра Uri для каждой модификации.

Свойства UriBuilder предоставляют доступ для чтения/записи к свойствам Uri только для чтения, поэтому их можно изменить.

Ответ 2

Вторые голоса за 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