Nhận tên miền máy chủ từ URL?


143

Làm thế nào để có được tên miền máy chủ từ một URL chuỗi?

GetDomain có 1 đầu vào "URL", 1 đầu ra "Miền"

Ví dụ 1

INPUT: http://support.domain.com/default.aspx?id=12345
OUTPUT: support.domain.com

Ví dụ2

INPUT: http://www.domain.com/default.aspx?id=12345
OUTPUT: www.domain.com

Ví dụ3

INPUT: http://localhost/default.aspx?id=12345
OUTPUT: localhost

Có vẻ như câu hỏi dành cho máy chủ lưu trữ trong URL chứ không phải tên miền của máy chủ, trừ khi tôi hoàn toàn hiểu nhầm "tên miền máy chủ" (trái ngược với chỉ "máy chủ"). Thực tế là câu trả lời nằm dọc theo dòng của Uri. Loại hỗ trợ nhất mà câu hỏi cần được cập nhật để phản ánh tốt hơn và phù hợp với các ví dụ mong muốn trong câu hỏi và câu trả lời được chấp nhận.
NoOne Đặc biệt

Câu trả lời:


266

Bạn có thể sử dụng Requestđối tượng hoặc Uriđối tượng để nhận máy chủ của url.

Sử dụng Request.Url

string host = Request.Url.Host;

Sử dụng Uri

Uri myUri = new Uri("http://www.contoso.com:8080/");   
string host = myUri.Host;  // host is "www.contoso.com"

2
Xin chào, tôi muốn sử dụng Request.Url, nhưng Visual Studio vẫn trả về biểu tượng Không thể giải quyết 'Yêu cầu'. Tôi không biết điều gì là sai. Tôi sử dụng Visual Studio 2010 và Net Framework 4.0. Bất cứ ai có thể giải thích các triệu chứng? Cảm ơn
Michal

1
Bạn cần phải có sẵn đối tượng Yêu cầu mà bạn có trong các trang web / dịch vụ nhưng không phải đằng sau đó theo mặc định. Bạn có thể lớp Uri nếu bạn không có sẵn đối tượng Yêu cầu
Adil

54

Hãy thử như thế này;

Uri.GetLeftPart( UriPartial.Authority )

Xác định các phần của URI cho phương thức Uri.GetLeftPart.


http://www.contoso.com/index.htm?date=today -> http://www.contoso.com

http://www.contoso.com/index.htmlm#main -> http://www.contoso.com

nntp: //news.contoso.com/123456@contoso.com -> nntp: //news.contoso.com

tệp: //server/filename.ext -> tệp: // máy chủ

Uri uriAddress = new Uri("http://www.contoso.com/index.htm#search");
Console.WriteLine("The path of this Uri is {0}", uriAddress.GetLeftPart(UriPartial.Authority));

Demo


28

Sử dụng Uri lớp và sử dụng chủ sở hữu

Uri url = new Uri(@"http://support.domain.com/default.aspx?id=12345");
Console.WriteLine(url.Host);

15

thử tuyên bố sau

 Uri myuri = new Uri(System.Web.HttpContext.Current.Request.Url.AbsoluteUri);
 string pathQuery = myuri.PathAndQuery;
 string hostName = myuri.ToString().Replace(pathQuery , "");

Ví dụ 1

 Input : http://localhost:4366/Default.aspx?id=notlogin
 Ouput : http://localhost:4366

Ví dụ2

 Input : http://support.domain.com/default.aspx?id=12345
 Output: support.domain.com

không hoạt động nếu myuri.PathAndQuery là "/" nó chỉ thay thế "/" bằng ""
Patrick từ nhóm NDepend

9

Cách tốt nhất và đúng cách để làm điều đó là sử dụng Uri.Authoritytrường

Tải và sử dụng Uri như vậy:

Uri NewUri;

if (Uri.TryCreate([string with your Url], UriKind.Absolute, out NewUri))
{
     Console.Writeline(NewUri.Authority);
}

Input : http://support.domain.com/default.aspx?id=12345
Output : support.domain.com

Input : http://www.domain.com/default.aspx?id=12345
output : www.domain.com

Input : http://localhost/default.aspx?id=12345
Output : localhost

Nếu bạn muốn thao tác Url, sử dụng đối tượng Uri là cách tốt để làm điều đó. https://msdn.microsoft.com/en-us/l Library / system.uri (v = vs.110) .aspx


1

Thử cái này

Console.WriteLine(GetDomain.GetDomainFromUrl("http://support.domain.com/default.aspx?id=12345"));

Nó sẽ xuất support.domain.com

Hay là thử

Uri.GetLeftPart( UriPartial.Authority )


-2

WWW là một bí danh, vì vậy bạn không cần nó nếu bạn muốn một tên miền. Đây là hàm litllte của tôi để lấy tên miền thực từ một chuỗi

private string GetDomain(string url)
    {
        string[] split = url.Split('.');
        if (split.Length > 2)
            return split[split.Length - 2] + "." + split[split.Length - 1];
        else
            return url;

    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.