【问题标题】:Parsed Uri has wrong port number解析的 Uri 有错误的端口号
【发布时间】:2016-03-02 10:32:29
【问题描述】:

考虑代码,假设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 返回真。但是尽管在 URI 中指定了端口 myUri.Port 是 -1 并且 myUri.Host 是空的。

我应该如何解析这个字符串以获得正确的端口号?

【问题讨论】:

    标签: c# uri


    【解决方案1】:

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

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

    DotNetFiddle

    【讨论】:

    • 正要写这个,你抢先了
    • 正如我提到的 baseUri 来自用户输入。它可以是 http://、https://、ftp:// 等。我不能只添加协议。这就是为什么我试图通过阅读 IsAbsoluteUri 属性来检测是否需要添加它
    • 如果输入不正确,您会得到模糊的数据 - 毕竟它应该猜测 ftp http https?
    • @AskNReply 你的意思是什么?如果 uri 来自用户输入,您显然希望验证它是包含该方案的正确 URI。
    • 2BugFinder。 Uri 以正确的形式出现。如果您尝试Uri.TryCreate("www.contoso.com:8080/", UriKind.Absolute, out baseUri);,您将获得格式良好的对象。
    猜你喜欢
    • 2017-02-08
    • 2012-02-09
    • 2022-08-11
    • 1970-01-01
    • 2014-07-27
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    相关资源
    最近更新 更多