Подтвердить что ты не робот

Извлечь базу URl из строки в С#?

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

Спасибо

4b9b3361

Ответ 1

Вы можете использовать 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, Path или Query, MSDN. введите описание изображения здесь

Ответ 2

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 (не включая порт или схему)

Ответ 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/

Ответ 4

Если вы хотите получить все 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);
        }

Ответ 5

Просто создайте расширение для класса 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();