¿Cómo verificar si una cadena es una URL HTTP válida?

Existen los métodos Uri.IsWellFormedUriString y Uri.TryCreate , pero parecen ser true para rutas de archivos, etc.

¿Cómo puedo verificar si una cadena es una URL HTTP válida (no necesariamente activa) para fines de validación de entrada?

Intente esto para validar URL HTTP ( uriName es el URI que desea probar):

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

O bien, si desea aceptar las URL HTTP y HTTPS como válidas (según el comentario de J0e3gan):

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

Este método funciona bien tanto en http como en https. Solo una línea 🙂

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

MSDN: IsWellFormedUriString

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

Uso:

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

ACTUALIZACIÓN: (línea única de código) Gracias @GoClimbColorado

 public static bool CheckURLValid(this string source) => Uri.TryCreate(source, UriKind.Absolute, out Uri uriResult) && uriResult.Scheme == Uri.UriSchemeHttps; 

Uso:

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

Después de Uri.TryCreate puede verificar Uri.Scheme para ver si es HTTP (s).

Esto devolvería bool:

 Uri.IsWellFormedUriString(a.GetAttribute("href"), UriKind.Absolute) 
 Uri uri = null; if (!Uri.TryCreate(url, UriKind.Absolute, out uri) || null == uri) return false; else return true; 

Aquí url es la cadena que tienes que probar.