2010-02-04 7 views

Respuesta

18

Usted puede utilizar el método Uri.IsWellFormedUriString, que toma un UriKind como argumento, especificando si usted está comprobando para absoluta o relativa.

bool IsAbsoluteUrl(string url) { 
    if (!Uri.IsWellFormedUriString(url, UriKind.RelativeOrAbsolute)) { 
     throw new ArgumentException("URL was in an invalid format", "url"); 
    } 
    return Uri.IsWellFormedUriString(url, UriKind.Absolute); 
} 

IsAbsoluteUrl("http://www.absolutepath.com/subpage"); // true 
IsAbsoluteUrl("/subpage"); // false 
IsAbsoluteUrl("subpage"); // false 
IsAbsoluteUrl("http://www.absolutepath.com"); // true 
+0

Esto es exactamente lo que necesitaba. ¡Gracias! – Ben

+4

Si está revisando para ver si la URL enviará al usuario a un dominio diferente, esto falla. No maneja las URL relativas al protocolo. '// gmail.com' se considera relativo, no absoluto, a System.Uri. Los navegadores asumirán el esquema/protocolo actual, pero System.Uri no maneja ese caso. – yzorg

1

Prueba esto:

Uri uri = new Uri("http://www.absolutepath.com/subpage"); 
Console.WriteLine(uri.IsAbsoluteUri); 

Editar: Si no está seguro de que la dirección está bien formado, usted debe utilizar:

static bool IsAbsolute(string address, UriKind kind) 
{ 
    Uri uri = null; 
    return Uri.TryCreate(address, kind, out uri) ? 
     uri.IsAbsoluteUri : false; 
} 
+0

Si está revisando para ver si la URL enviará al usuario a un dominio diferente, esto falla. No maneja las URL relativas al protocolo. '// gmail.com' se considera relativo, no absoluto, a System.Uri. – yzorg

4

Determine if Absolute or Relative URL tiene más simple answer

bool IsAbsoluteUrl(string url) 
     { 
      Uri result; 
      return Uri.TryCreate(url, UriKind.Absolute, out result);     
     } 
+2

Uri.IsWellFormedUriString (url, UriKind.Absolute) es bastante simple, también. También es probablemente más rápido, ya que no está tratando de crear un nuevo Uri. – Vlad

Cuestiones relacionadas