Existen los métodos Uri.IsWellFormedUriString
y Uri.TryCreate
, pero parecen volver true
para rutas de archivos, etc.
¿Cómo verifico si una cadena es una URL HTTP válida (no necesariamente activa) para fines de validación de entrada?
Existen los métodos Uri.IsWellFormedUriString
y Uri.TryCreate
, pero parecen volver true
para rutas de archivos, etc.
¿Cómo verifico si una cadena es una URL HTTP válida (no necesariamente activa) para fines de validación de entrada?
Respuestas:
Pruebe esto para validar las URL HTTP (
uriName
es el URI que desea probar):O, si desea aceptar las URL HTTP y HTTPS como válidas (según el comentario de J0e3gan):
fuente
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 :)
MSDN: IsWellFormedUriString
fuente
file://
oldap://
. Esta solución debe combinarse con una verificación contra el esquema, por ejemploif (uri.Scheme != Uri.UriSchemeHttp && uri.Scheme != Uri.UriSchemeHttps) ...
Uso:
ACTUALIZACIÓN: (línea única de código) Gracias @GoClimbColorado
Uso:
fuente
Uri.TryCreate(source, UriKind.Absolute, out Uri uriResult) && uriResult.Scheme == Uri.UriSchemeHttps
Todas las respuestas aquí permiten URL con otros esquemas (p. Ej.
file://
,ftp://
) O rechazan las URL legibles por humanos que no comienzan conhttp://
ohttps://
(p. Ej.www.google.com
) , Lo que no es bueno cuando se trata de entradas de usuario .Así es como lo hago:
Uso:
Salida:
fuente
http://mooooooooo
, de hecho, es un Uri válido. Por lo tanto, no puede verificarloUri.IsWellFormedUriString
después de insertar "http: //" y si lo verifica antes, cualquier cosa que no tenga unScheme
será rechazado. Tal vez lo que se puede hacer es verificar en sus.Contains('.')
lugar.IsWellFormedUriString
antes de agregar elhttp://
, terminará rechazando cosas como,google.com
y si lo usa después de agregar elhttp://
, seguirá siendo cierto parahttp://mooooooooo
. Es por eso que sugerí verificar si la cadena contiene un.
en su lugar.Después de
Uri.TryCreate
que puede verificarUri.Scheme
si HTTP (s).fuente
Trata eso:
Aceptará URL así:
fuente
Esto devolvería bool:
fuente
Aquí
url
está la cadena que tienes que probar.fuente
fuente