2016-03-02 125 views
-1

考慮代碼,假設baseUri來自一個方法參數解析的烏里有錯誤的端口號

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返回true。但是,儘管端口在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