2011-09-28 18 views

risposta

291

Provate a validare URL HTTP (uriName è l'URI che si desidera testare):

Uri uriResult; 
bool result = Uri.TryCreate(uriName, UriKind.Absolute, out uriResult) 
    && uriResult.Scheme == Uri.UriSchemeHttp; 

Oppure, se si vuole accettare sia HTTP e HTTPS URL come valido (per il commento di J0e3gan):

Uri uriResult; 
bool result = Uri.TryCreate(uriName, UriKind.Absolute, out uriResult) 
    && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps); 
+6

Qualora questa lettura uriResult.Scheme invece di uriName.Scheme? Sto usando l'overload per TryCreate che prende String invece di Uri come primo parametro. –

+7

Potresti voler aggiungere più condizioni a uriResult.Scheme == ... Specificamente https. Dipende da cosa ti serve, ma questo piccolo cambiamento era tutto ciò di cui avevo bisogno perché funzionasse perfettamente per me. – Fiarr

+8

Per essere chiari per il commento di @ Fiarr, la "piccola modifica" necessaria per tenere conto di HTTPS in aggiunta agli URL HTTP è: 'bool result = Uri.TryCreate (uriName, UriKind.Absolute, out uriResult) && uriResult.Scheme == Uri .UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps; ' – J0e3gan

4

Dopo Uri.TryCreate è possibile controllare Uri.Scheme per vedere se HTTP (s).

0

Questo sarebbe tornato bool:

Uri.IsWellFormedUriString(a.GetAttribute("href"), UriKind.Absolute) 
+1

Penso che l'OP abbia menzionato in modo specifico, non gli piace Uri.IsWellFormedUriString in quanto fornisce true per i percorsi dei file. Hai una soluzione per questo problema? – Isantipov

0
Uri uri = null; 
if (!Uri.TryCreate(url, UriKind.Absolute, out uri) || null == uri) 
    return false; 
else 
    return true; 

Qui url è la stringa da testare.

14
public static bool CheckURLValid(this string source) 
    { 
     Uri uriResult; 
     return Uri.TryCreate(source, UriKind.Absolute, out uriResult) && uriResult.Scheme == Uri.UriSchemeHttp; 
    } 

Usage:

string url = "htts://adasd.xc."; 
if(url.CheckUrlValid()) 
{ 
    //valid process 
} 
+0

Questo non sembra gestire gli URL www. IE: www.google.com viene visualizzato come non valido. –

+4

@ZauberParacelsus "www.google.com" non è valido. La media URL deve iniziare con "http", "ftp", "file", ecc. La stringa deve essere "http: // www.google.com" senza spazio –

53

Questo metodo funziona bene sia in HTTP e HTTPS. Una sola riga :)

if (Uri.IsWellFormedUriString("https://www.google.com", UriKind.Absolute)) 

MSDN: IsWellFormedUriString

+4

Ciò restituirà true per gli URI non HTTP (vale a dire [qualsiasi altro schema ] (https://msdn.microsoft.com/en-us/library/system.uri.scheme (v = vs.110) .aspx) come 'file: //' o 'ldap: //'. Questa soluzione deve essere accoppiato con un controllo sullo schema - ad esempio 'if (uri.Scheme! = Uri.UriSchemeHttp && uri.Scheme! = Uri.UriSchemeHttps) ...' – Squiggle

+4

Fails 17 test qui: https: // dotnetfiddle. net/XduN3A – Lee

Problemi correlati