Как это проверить строка uri действительна

Как вы проверяете, что строка 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.

62
задан Luke Girvin 28 March 2018 в 09:24
поделиться