Как вы проверяете, что строка uri действительна (чтобы вы могли передать ее конструктору Uri)?
Пока у меня есть только следующее, но по очевидным причинам я бы предпочел менее грубый способ:
Boolean IsValidUri(String uri)
{
try
{
new Uri(uri);
return true;
}
catch
{
return false;
}
}
Я попробовал Uri.IsWellFformedUriString, но он не Кажется, мне нравится все, что вы можете бросить в конструктор. Например:
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 и конструктор. Вы действительно получите ожидаемый результат, если сопоставите UriKind и для конструктора, и для TryCreate.