2009-03-31 10 views

Respuesta

32

para comprobar si una URL es válida en lugar de utilizar excepciones puede utilizar el TryCreate método:

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

eso me gusta más. ¡Gracias! –

+0

Ahora, de acuerdo con Uri.TryCreate url como hht: //www.gogole.com es válido. Aunque el htt: es un esquema no válido. ¿Por qué está htt: está bien? –

+1

htt: es un esquema perfectamente válido. Un protocolo personalizado podría definir este esquema. –

0

Si está revisando si la estructura de la URL es válida, entonces previous answer está bien.

Sin embargo, si desea comprobar que el recurso existe en realidad, tendrá que utilizar las clases que se derivan de WebRequest/WebResponse. Para los recursos HTTP y FTP, las clases HttpWebRequest/FtpWebRequest y HttpWebResponse/FtpWebResponse funcionarán bien (al igual que WebClient), pero si tiene otros esquemas que debe admitir, tendrá que buscar proveedores específicos para ese esquema.

13

Usando Uri .TryCreate puede tener algunos problemas con Uris relativo, con una cadena como esta "/folder/{ht.com.m\/sx.r:erp://" TryCreate devuelve verdadero, así que creo esto método de extensión usando IsWellFormedUriString y TyrCreate, no estoy seguro de TRYCREATE es necesario, con mis pequeñas pruebas que consigo los mismos resultados con o sin 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); 
} 

Ejemplo

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 
} 
Cuestiones relacionadas