2010-02-04 2 views
9

Я пытаюсь определить в vb, если URL-адрес является абсолютным или относительным. Я уверен, что должна быть какая-то библиотека, которая может это сделать, но я не уверен, что. В основном мне нужно иметь возможность анализировать строку, такую ​​как «relative/path» и «http://www.absolutepath.com/subpage», и определять, является ли она абсолютной или относительной. Заранее спасибо.Определите, является ли Url абсолютным или относительным из vb

-ben

ответ

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-адреса, относящиеся к протоколу. '// gmail.com' считается относительным, а не абсолютным, для System.Uri. Браузеры предполагают текущую схему/протокол, но System.Uri не обрабатывает этот случай. – yzorg

1

Попробуйте это:

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

Edit: Если вы не уверены в том, что адрес правильно сформирован, вы должны использовать:

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

Если вы проверяете, не приведет ли URL-адрес пользователя к другому домену, это не сработает. Он не обрабатывает URL-адреса, относящиеся к протоколу. '// gmail.com' считается относительным, а не абсолютным, для System.Uri. – 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

Смежные вопросы