2016-03-02 47 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