Подтвердить что ты не робот

Как использовать класс System.Uri.NET для проверки правильности URL?

В одном из предыдущих сообщений было предложено использовать System.Uri для проверки правильности URL. Как это сделать?

4b9b3361

Ответ 1

Чтобы проверить правильность URL-адреса вместо использования исключений, вы можете использовать метод TryCreate:

Uri result;
if (Uri.TryCreate("http://www.google.com", UriKind.RelativeOrAbsolute, out result)) 
{
    // the url is valid
}

Ответ 2

Использование Uri.TryCreate может иметь некоторые проблемы с относительным Uris, со строкой, подобной этой "/folder/{ht.com.m\/sx.r:erp://" TryCreate возвращает true, поэтому я создаю этот метод расширения используя IsWellFormedUriString и TyrCreate, я не уверен, что TryCreate необходим, с моими маленькими тестами я получаю те же результаты с TryCreate или без него

public static bool IsUri(this string source) {
  if(!string.IsNullOrEmpty(source) && Uri.IsWellFormedUriString(source, UriKind.RelativeOrAbsolute)){
    Uri tempValue;
    return (Uri.TryCreate(source, UriKind.RelativeOrAbsolute, out tempValue));
  }
  return (false);
}

Пример

address= "http://www.c$nbv.gob.mx"
if(address.IsUri()){
  //returns false
}
address= "http://www.cnbv.gob.mx"
if(address.IsUri()){
  //returns true
}
address= "http://www.cnbv.gob.mx:80"
if(address.IsUri()){
  //returns true
}
address= "/directory/path"
if(address.IsUri()){
  //returns true
}
address= "~re#l|ativ[ainco#recta\car:.\peta"
if(address.IsUri()){
  //returns false
}

Ответ 4

Если вы проверяете, правильна ли структура URL-адреса, то предыдущий ответ - это нормально.

Однако, если вы хотите проверить, что ресурс действительно существует, вам придется использовать классы, которые происходят из WebRequest/WebResponse. Для ресурсов HTTP и FTP классы HttpWebRequest/FtpWebRequest и HttpWebResponse/FtpWebResponse будут работать нормально (как и WebClient), но если у вас есть другие схемы, которые вы должны поддерживать, вам придется найти конкретных поставщиков для этой схемы.