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

到目前为止,我只有以下几点,但出于明显的原因,我更喜欢不那么 brute 的方式:

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

我try 了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

Update/Answer

Uri构造函数默认使用绝对类.当我try 使用Uri时,这导致了不一致.TryCreate和构造函数.如果将构造函数和TryCreate的UriKind都匹配,则会得到预期的结果.

推荐答案

格式良好的URI意味着符合某些RFC.您示例中的本地路径与这些不一致.请阅读IsWellFormedUriString文档中的更多内容.

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

Update:为了回答您的问题——正如Uri文档所示,有一个名为TryCreate的静态方法,它将完全try 您想要的内容,并返回true或false(如果为true,则返回实际的Uri实例).

.net相关问答推荐

与 Datagrid 的 SelectedItem 链接时的 WPF RadioButton 绑定问题

为什么这个同步运行的异步睡眠会挂起?

如何在 Raspberry Pi 上托管 WASM 文件?

如何计算给定2个字符串的距离相似性度量?

使用 Thread.Abort() 有什么问题

log4net 与 TraceSource

.NET 世界是否有 Maven 替代方案或端口?

IEnumerable Count() 和 Length 的区别

为什么 C# 多维数组不实现 IEnumerable

如何使用 NUnit(或可能使用另一个框架)测试异步方法?

在 C# 中使用委托

当程序员说针对接口而不是对象的代码时,他们是什么意思?

单元测试 C# 保护方法

如何仅在需要时提升权限?

确定使用 ContextMenuStrip 的控件

在不使用while循环的情况下找到最里面的异常?

表单不响应 KeyDown 事件

在 C# 中转义无效的 XML 字符

如何为 Dapper 查询动态创建参数

如何从 webclient 获取状态码?