.net - whatwg - www 3wc




¿Hay un validador de URL en.Net? (4)

¿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


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




url