2010-02-04 68 views

回答

18

可以使用Uri.IsWellFormedUriString方法,這需要一個UriKind作爲參數,指定是否要覈實絕對或相對的。

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

這正是我所需要的。謝謝! – Ben

+4

如果您正在檢查URL是否會將用戶發送到其他域,則會失敗。它不處理與協議相關的URL。 System.Uri認爲'// gmail.com'是相對的,而不是絕對的。瀏覽器將採用當前的方案/協議,但System.Uri不處理這種情況。 – yzorg

1

試試這個:

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

編輯:如果你不知道該地址是良好的,你應該使用:

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

如果您正在檢查URL是否會將用戶發送到其他域,則會失敗。它不處理與協議相關的URL。 System.Uri認爲'// gmail.com'是相對的,而不是絕對的。 – yzorg

4

Determine if Absolute or Relative URL具有簡單answer

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

Uri.IsWellFormedUriString(url,UriKind.Absolute)也非常簡單。此外它可能更快,因爲它不是試圖創建一個新的Uri。 – Vlad