2015-05-25 2 views
2

В веб-приложении у меня есть аудитория, используемая для аутентификации. Когда я установил его из кода вроде:В чем разница между новым Uri (..) и новым UriBuilder (..). Uri для того же хоста?

var audience1 = new UriBuilder("dev.website.com") 
       { 
        Port = 443, 
        Scheme = "https", 
        Path = "/" 
       }.Uri; // Does not work! 

Это не wokring.

Но когда я поставил его так:

var audenice2 = new Uri("https://dev.website.com"); // It works! 

он работает отлично.

Самое смешное, что следующее работает отлично!

var audience3 = new Uri(audience1.ToString()); // It works! 

Любая идея в чем разница?

ответ

0

UriBuilder (как и любая реализация рисунка строителя) позволяет вам предоставить куски, необходимые для сборки более крупного объекта в форме «по частям», а затем позволяет создать экземпляр конечного продукта (используя свойство .Uri). Вам не обязательно нужно строить объект за один раз (т. Е. Вы можете мутировать строителя по ходу дела).

Однако, похоже, что вы не используете конструктор UriBuilder(String) правильно. From MSDN

Этот конструктор инициализирует новый экземпляр класса UriBuilder с фрагментом, хост, путь, порт, запрос, Scheme и Ури заданными свойствами, как указано в URI.

Значение вы должны сделать это, чтобы использовать этот конструктор перегрузки:

var audience1 = new UriBuilder("https://dev.website.com").Uri; 

(или даже https://dev.website.com:443)

Который не был бы полезным для вас, как это не имеет никаких преимуществ по сравнению строительства a Uri непосредственно с той же строкой.

UriBuilder будет более обычно используется для штучных еды собрать Ури, например, так:

var myUriBuilder = new UriBuilder(); 
myUriBuilder.Host = (host == "dev") 
    ? "dev.website.com" 
    : "qa.website.com"; 

if (useSsl) 
{ 
    myUriBuilder.Scheme = "https"; 
    myUriBuilder.Port = 443; 
} 

var myUri = myUriBuilder.Uri; 

(то есть с довольно сложной логикой определения судьбы каждого из свойств строителя в отдельных отчетах).

+0

На самом деле это не сработало. Если я изменил порт на -1, он отлично работает! – Homam

+0

Не могли бы вы объяснить, что вы подразумеваете под «не работает» - все методы (прямые 'Uri' и' UriBuilder', и поэтапные 'UriBuilder') могут использоваться для построения тех же Uri? Установка порта в -1 сбрасывает Uri на порт по умолчанию на основе схемы (например, 80 для HTTP и 443 для HTTPS) – StuartLC

Смежные вопросы