В одном из предыдущих сообщений было предложено использовать System.Uri для проверки правильности URL. Как это сделать?
Как использовать класс System.Uri.NET для проверки правильности URL?
Ответ 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
}
Ответ 3
Может использовать статический метод IsWellFormedUriString:
bool isValid = Uri.IsWellFormedUriString(url, UriKind.Absolute);
http://msdn.microsoft.com/en-us/library/system.uri.iswellformeduristring.aspx
Ответ 4
Если вы проверяете, правильна ли структура URL-адреса, то предыдущий ответ - это нормально.
Однако, если вы хотите проверить, что ресурс действительно существует, вам придется использовать классы, которые происходят из WebRequest/WebResponse. Для ресурсов HTTP и FTP классы HttpWebRequest/FtpWebRequest и HttpWebResponse/FtpWebResponse будут работать нормально (как и WebClient), но если у вас есть другие схемы, которые вы должны поддерживать, вам придется найти конкретных поставщиков для этой схемы.