Изменение порта System.Uri
Итак, у меня есть этот объект Uri
, который содержит адрес, что-то вроде http://localhost:1000/blah/blah/blah
. Мне нужно изменить номер порта и оставить все остальные части адреса неповрежденными. Скажем, мне нужно, чтобы это было http://localhost:1080/blah/blah/blah
.
Объекты Uri
в значительной степени неизменяемы, поэтому я могу получить доступ к номеру порта через свойство Port
, но он доступен только для чтения. Есть ли разумный способ создания объекта Uri
точно как другой, но с другим портом? Под "здравомыслящим" я подразумеваю "без беспорядка с регулярными выражениями и строковыми манипуляциями", потому что, хотя это тривиально для вышеприведенного примера, он по-прежнему пахнет ямой червей для меня. Если это единственный способ, я действительно надеюсь, что он уже реализован кем-то и есть некоторые помощники там, может быть (я их не нашел)
Спасибо заранее.
Ответы
Ответ 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