2016-03-02 2 views
-1

Рассмотрим код, предполагая baseUri происходит от параметра методаParsed Uri имеет неправильный номер порта

Uri baseUri = new Uri("www.contoso.com:8080/", UriKind.RelativeOrAbsolute); 

    baseUri = baseUri.IsAbsoluteUri 
      ? baseUri 
      : new Uri("http://" + baseUri.OriginalString);//make URI http by default 
    Uri myUri = new Uri(baseUri, "catalog/shownew.htm?date=today"); 

Для данной строки IsAbsoluteUri возвращает верно. Но, несмотря на то, что порт указан прямо в URI, myUri.Port равен -1, а myUri.Host пуст.

Как следует проанализировать эту строку, чтобы получить правильный номер порта?

ответ

0

Вам нужно добавить http:// в начале вашей базы Uri строки, чтобы сделать его действительный URI, например:

Uri baseUri = new Uri("http://www.contoso.com:8080/", UriKind.RelativeOrAbsolute); 

DotNetFiddle

+0

как раз собирался написать это, и вы избили меня к нему – BugFinder

+0

Как Я упомянул, что baseUri происходит от пользовательского ввода. Это может быть http: //, https: //, ftp: // и т. Д. Я не могу просто добавить протокол. Вот почему я попытался определить, нужно ли мне добавить его, прочитав свойство IsAbsoluteUri –

+0

, если оно окажется неправильным, вы получите неопределенные данные - ведь все-таки предполагается, что он догадается ftp http https? – BugFinder

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