¿Cómo se comprueba que una cadena de uri es válida (que se puede alimentar al constructor de Uri)?
Hasta ahora solo tengo lo siguiente, pero por razones obvias prefiero una forma menos bruta:
Boolean IsValidUri(String uri)
{
try
{
new Uri(uri);
return true;
}
catch
{
return false;
}
}
Probé Uri.IsWellFormedUriString pero no parece gustarle todo lo que puede lanzar al constructor. Por ejemplo:
String test = @"C:\File.txt";
Console.WriteLine("Uri.IsWellFormedUriString says: {0}", Uri.IsWellFormedUriString(test, UriKind.RelativeOrAbsolute));
Console.WriteLine("IsValidUri says: {0}", IsValidUri(test));
La salida será:
Uri.IsWellFormedUriString says: False
IsValidUri says: True
Actualizar / Responder
El constructor Uri usa kind Absolute por defecto. Esto estaba causando una discrepancia cuando intenté usar Uri.TryCreate y el constructor. Obtiene el resultado esperado si hace coincidir el UriKind tanto para el constructor como para TryCreate.