C# 解析的Uri具有错误的端口号

C# 解析的Uri具有错误的端口号,c#,uri,C#,Uri,考虑代码,假设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

考虑代码,假设
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是空的


如何解析此字符串以获得正确的端口号?

您需要在基本uri字符串的开头添加
http://
,以使其成为有效的uri,例如:

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

我正要写这篇文章,你抢先告诉我,因为我提到baseUri来自用户输入。它可以是http://、https://、ftp://等等。我不能只添加协议。这就是为什么我试图通过读取IsaSoluteUri属性来检测是否需要添加它。如果输入的数据不正确,您将得到模糊的数据——毕竟它应该是猜测ftp http https的?@AskNReply您的观点是什么?如果uri来自用户输入,您显然需要验证它是否是包含scheme.2BugFinder的正确uri。Uri的格式正确。如果您尝试
Uri.TryCreate(“www.contoso.com:8080/”,UriKind.Absolute,out baseUri)您将获得格式良好的对象。