www ¿Hay un validador de URL en.Net?




www 3wc (4)

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.

¿Existe algún método para validar URL en .Net, ASP.Net o ASP.Net MVC?


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.


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


static bool IsValidUri(string urlString) {
   try {
      new Uri(urlString);
      return true;
   } catch {
      return false;
   }
}






url