2013-03-26 2 views
17

В настоящее время я работаю над проектом с .NET 1.1 framework, и я застрял на этом этапе. У меня есть строка типа «http://www.example.com/mypage/default.aspx», или это может быть «http://www.example.edu/mypage/default.aspx» или «http://www.example.eu/mypage/default.aspx». Как я могу извлечь базовый URl из этого типа строки.Извлечь базу URl из строки в C#?

Благодаря

+0

Вы должны использовать регулярное выражение –

+3

Почему так много вариантов "использовать класс Uri"? Если кто-то уже ответил, лучше предложить какие-либо улучшения в их ответе, чем создать дюжину дубликатов. –

+2

Определите «базовый URI» – spender

ответ

44

Вы можете использовать URI класс, чтобы получить имя хоста.

var uri = new Uri("http://www.example.com/mypage/default.aspx");  
var host = uri.Host; 

Редактировать Вы можете использовать uri.Scheme и uri.Port получить .Scheme например, (HTTP, FTP) и .Port, чтобы получить номер порта, как (8080)

string host = uri.Host; 
string scheme = uri.Scheme; 
int port = uri.Port; 

Вы можете использовать Uri.GetLeftPart, чтобы получить базовый URL.

GetLeftPart метод возвращает строку, содержащую крайнюю левую часть строки URI, заканчивая части указанной части.

var uri = new Uri("http://www.example.com/mypage/default.aspx");  
var baseUri = uri.GetLeftPart(System.UriPartial.Authority); 

Следующие примеры показывают URI и результаты вызова GetLeftPart с Scheme, Authority, путь, или запрос MSDN. enter image description here

+0

Спасибо за быструю помощь. Это помогло. Спасибо всем за ответы. – PushCode

+2

@HRK: Я не понимаю, как запрос на «базовый URI» удовлетворен ответом, который предоставляет хост. Это не то, что вы спросили. – spender

+0

+1 к этому ... @spender (+1 тоже) - так как нет действительно строгого определения, что такое «базовый URI», это очень сложно угадать, что нужно оригинальному плакату ... :) –

3
var builder = new UriBuilder("http://www.example.com/mypage/default.aspx"); 
builder.Path = String.Empty; 
var baseUri = builder.Uri; 
var baseUrl = baseUri.ToString(); 
// http://www.example.com/ 
0

Если вы хотите, чтобы получить все 3 из них в списке здесь является то, что вы могли бы также начать с Есть так много вариантов, которые вы можете сделать, как только вы получите Host Name также, если Вы желаете все прошлое .com использовать метод AbsolutePath

var uriList = new List<string>() 
      { 
       "http://www.mysite.com/mypage/default.aspx", 
       "http://www.mysite.edu/mypage/default.aspx", 
       "http://www.mysite.eu/mypage/default.aspx" 
      }; 
     var holdList = new List<string>(); 
     foreach (var uriName in uriList) 
     { 
      Uri uri = new Uri(uriName); 
      holdList.Add(uri.Host); 
     } 
36
uri.GetLeftPart(...) 

Предполагая, что "базовый URI" означает что-то вроде http://www.example.com
вы можете получить, что как так:

var uri = new Uri("http://www.example.com/mypage/default.aspx");  
var baseUri = uri.GetLeftPart(System.UriPartial.Authority) 

Это дает: http://www.example.com

Примечание: uri.Host дает: www.example.com (не включая порт или схемы)

+0

Это именно то, что мне нужно для одного из моих вопросов! – devcoder

+1

Гораздо более прохладный, чем принятый ответ! Upvoted. –

0

Просто создать расширение для класса Uri. По-моему, вещи, которые должны быть с самого начала. Это облегчит вашу жизнь.

public static class UriExtensions 
{     
    public static Uri AttachParameters(this Uri uri, 
             NameValueCollection parameters) 
    { 
     var stringBuilder = new StringBuilder(); 
     string str = "?"; 
     for (int index = 0; index < parameters.Count; ++index) 
     { 
      stringBuilder.Append(str + 
       System.Net.WebUtility.UrlEncode(parameters.AllKeys[index]) + 
       "=" + System.Net.WebUtility.UrlEncode(parameters[index])); 
      str = "&"; 
     } 
     return new Uri(uri + stringBuilder.ToString()); 
    } 

    public static string GetBaseUrl(this Uri uri) { 
     string baseUrl = uri.Scheme + "://" + uri.Host; 
     return baseUrl; 
    } 

    public static string GetBaseUrl_Path(this Uri uri) { 
     string baseUrl = uri.Scheme + "://" + uri.Host + uri.AbsolutePath; 
     return baseUrl; 
    } 
} 

Использование:

//url - https://example.com/api/rest/example?firstname=Linus&lastname=Trovalds 
Uri myUri = new Uri("https://example.com/api/rest/example").AttachParameters(
      new NameValueCollection 
      { 
       {"firstname","Linus"}, 
       {"lastname","Trovalds"} 
      } 
     ); 
// https://example.com 
string baseUrl = myUri.GetBaseUrl(); 
// https://example.com/api/rest/example 
string baseUrlandPath = myUri.GetBaseUrl_Path(); 
Смежные вопросы