Как можно использовать класс System.Uri .NET для проверки правильности URL-адреса? - PullRequest
16 голосов
/ 31 марта 2009

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

Ответы [ 4 ]

32 голосов
/ 31 марта 2009

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

Uri result;
if (Uri.TryCreate("http://www.google.com", UriKind.RelativeOrAbsolute, out result)) 
{
    // the url is valid
}
13 голосов
/ 13 мая 2009

Использование Uri.TryCreate может иметь некоторые проблемы с относительным Uris, с такой строкой "/folder/ndomht.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
}
9 голосов
/ 31 марта 2009

Может использовать статический метод IsWellFormedUriString:

bool isValid = Uri.IsWellFormedUriString(url, UriKind.Absolute);

http://msdn.microsoft.com/en-us/library/system.uri.iswellformeduristring.aspx

0 голосов
/ 31 марта 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...