Wie überprüfen Sie, ob eine Uri-Zeichenfolge gültig ist (dass Sie sie dem Uri-Konstruktor zuführen können)?
Bisher habe ich nur Folgendes, aber aus offensichtlichen Gründen würde ich einen weniger brutalen Weg bevorzugen:
Boolean IsValidUri(String uri)
{
try
{
new Uri(uri);
return true;
}
catch
{
return false;
}
}
Ich habe Uri.IsWellFormedUriString ausprobiert, aber es scheint nicht alles zu gefallen, was Sie auf den Konstruktor werfen können. Zum Beispiel:
String test = @"C:\File.txt";
Console.WriteLine("Uri.IsWellFormedUriString says: {0}", Uri.IsWellFormedUriString(test, UriKind.RelativeOrAbsolute));
Console.WriteLine("IsValidUri says: {0}", IsValidUri(test));
Die Ausgabe wird sein:
Uri.IsWellFormedUriString says: False
IsValidUri says: True
Update / Antwort
Der Uri-Konstruktor verwendet standardmäßig die Art Absolute. Dies verursachte eine Diskrepanz, als ich versuchte, Uri.TryCreate und den Konstruktor zu verwenden. Sie erhalten das erwartete Ergebnis, wenn Sie sowohl für den Konstruktor als auch für TryCreate mit UriKind übereinstimmen.