如何检查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构造函数使用种类Absolute。当我尝试使用Uri.TryCreate和构造函数时,这导致了差异。如果为构造函数和TryCreate都匹配UriKind,则可以得到预期的结果。