如何检查 uri 字符串是否有效

2024-02-13

如何检查 uri 字符串是否有效(可以将其提供给 Uri 构造函数)?

到目前为止,我只有以下内容,但出于明显的原因,我更喜欢一种不那么粗暴的方式:

    Boolean IsValidUri(String uri)
    {
        try
        {
            new Uri(uri);
            return true;
        }
        catch
        {
            return false;
        }
    }

我尝试了 Uri.IsWellFormedUriString 但它似乎并不喜欢您可以在构造函数中抛出的所有内容。例如:

String test = @"C:\File.txt";
Console.WriteLine("Uri.IsWellFormedUriString says: {0}", Uri.IsWellFormedUriString(test, UriKind.RelativeOrAbsolute));
Console.WriteLine("IsValidUri says: {0}", IsValidUri(test));

输出将是:

Uri.IsWellFormedUriString says: False
IsValidUri says: True

更新/答复

默认情况下,Uri 构造函数使用绝对类型。当我尝试使用 Uri.TryCreate 和构造函数时,这导致了差异。如果您匹配构造函数和 TryCreate 的 UriKind,您确实会得到预期的结果。


格式良好的 URI 意味着符合某些 RFC。您的示例中的本地路径与这些不符。阅读更多内容IsWellFormedUriString http://msdn.microsoft.com/en-us/library/system.uri.iswellformeduristring.aspx文档。

该方法的错误结果并不意味着Uri类将无法解析输入。虽然 URI 输入可能不符合 RFC,但它仍然可以是有效的 URI。

Update:回答你的问题 - 正如 Uri 文档所示,有一个静态方法称为TryCreate http://msdn.microsoft.com/en-us/library/ms131572.aspx这将完全尝试你想要的并返回 true 或 false (以及实际的Uri实例如果为真)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检查 uri 字符串是否有效 的相关文章