www whatwg what spec language español 3wc .net asp.net asp.net-mvc validation url

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; } }