whatwg - ¿Hay un validador de URL en.Net?
whatwg español (5)
¿Existe algún método para validar URL en .Net, ASP.Net o ASP.Net MVC?
Las respuestas proporcionadas hasta ahora no comprueban si hay un esquema, lo que permite todo tipo de entradas no deseadas, lo que podría hacerlo vulnerable a la inyección de JavaScript (vea el comentario de TheCloudlessSky).
Un URI es solo una identificación única de un objeto. "C: / Test" es un URI válido.
En mi proyecto usé el siguiente código:
/// <summary>
/// Validate a URL.
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
private bool ValidUrl(string url)
{
Uri validatedUri;
if (Uri.TryCreate(url, UriKind.Absolute, out validatedUri)) //.NET URI validation.
{
//If true: validatedUri contains a valid Uri. Check for the scheme in addition.
return (validatedUri.Scheme == Uri.UriSchemeHttp || validatedUri.Scheme == Uri.UriSchemeHttps);
}
return false;
}
Defina qué esquemas permitirá y cambie el código en consecuencia.
Puede usar Uri.IsWellFormedUriString, no es necesario crear su propia función para eso:
public static bool IsWellFormedUriString(string uriString, uriKind uriKind);
Donde uriKind puede ser:
UriKind.RelativeOrAbsolute
UriKind.Absolute
UriKind.Relative
Para obtener más información, consulte: Uri.IsWellFormedUriString
Una forma más rápida (probablemente) que usar la funcionalidad try / catch sería usar Regex. Si tuviera que validar miles de URL, la captura de la excepción varias veces sería lenta.
Aquí hay un enlace para muestrear Regex : use Google para encontrar más.
Puede usar Uri.TryCreate
para validar una URL:
public bool IsValidUri(string uri)
{
Uri validatedUri;
return Uri.TryCreate(uri, UriKind.RelativeOrAbsolute, out validatedUri);
}
Los comentarios sugieren que TryCreate
solo mueve la excepción que maneja un nivel hacia abajo. Sin embargo, revisé el código fuente y encontré que este no es el caso. No hay try / catch dentro de TryCreate
, usa un analizador personalizado que no debe arrojarse.
static bool IsValidUri(string urlString) {
try {
new Uri(urlString);
return true;
} catch {
return false;
}
}