รับโดเมนโฮสต์จาก URL หรือไม่


143

วิธีการรับโดเมนโฮสต์จาก URL สตริง?

GetDomain มี "URL" 1 อินพุต, 1 เอาต์พุต "โดเมน"

example1

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

example2

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

Example3

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

ดูเหมือนว่าคำถามนั้นมีไว้สำหรับโฮสต์ใน URL ไม่ใช่โดเมนของโฮสต์ยกเว้นว่าฉันเข้าใจผิดว่า "host domain" (ซึ่งต่างจาก "host" เพียงอย่างเดียว) ความจริงที่ว่าคำตอบนั้นเป็นไปตามแนวของการสนับสนุนประเภทUriส่วนใหญ่คำถามนั้นควรได้รับการปรับปรุงเพื่อให้สะท้อนและสอดคล้องกับตัวอย่างที่ต้องการในคำถามและคำตอบที่ยอมรับได้ดีขึ้น
NoOneSpecial

คำตอบ:


266

คุณสามารถใช้RequestวัตถุหรือUriวัตถุเพื่อรับโฮสต์ของ url

ใช้Request.Url

string host = Request.Url.Host;

ใช้Uri

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

2
สวัสดีฉันต้องการใช้ Request.Url แต่ Visual Studio ยังกลับมาไม่สามารถแก้ไขสัญลักษณ์ 'คำขอ' ได้ ฉันไม่รู้ว่ามีอะไรผิดปกติ ฉันใช้ Visual Studio 2010 และ Net Framework 4.0 มีใครอธิบายอาการได้บ้าง ขอบคุณ
Michal

1
คุณต้องมีคำขอวัตถุที่มีอยู่ซึ่งคุณมีอยู่ในหน้าเว็บ / บริการต่างๆ คุณสามารถเรียน Uri ถ้าคุณไม่มีคำขอวัตถุที่มีอยู่
Adil

54

ลองแบบนี้

Uri.GetLeftPart( UriPartial.Authority )

กำหนดชิ้นส่วนของ URI สำหรับวิธี Uri.GetLeftPart


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

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

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

ไฟล์: //server/filename.ext -> file: // เซิร์ฟเวอร์

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



15

ลองคำสั่งต่อไปนี้

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

example1

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

example2

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

ไม่ทำงานหาก myuri.PathAndQuery เป็น "/" เพียงแค่แทนที่ "/" ด้วย ""
Patrick จากทีม NDepend

9

วิธีที่ดีที่สุดและวิธีที่ถูกต้องคือใช้Uri.Authorityฟิลด์

โหลดและใช้ Uri ดังนี้:

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

หากคุณต้องการจัดการ Url การใช้วัตถุ Uri เป็นวิธีที่ดีที่จะทำ https://msdn.microsoft.com/en-us/library/system.uri(v=vs.110).aspx


1

ลองสิ่งนี้

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

มันจะส่งออก support.domain.com

หรือลอง

Uri.GetLeftPart( UriPartial.Authority )


-2

WWW เป็นชื่อแทนดังนั้นคุณไม่จำเป็นต้องใช้ถ้าคุณต้องการโดเมน นี่คือฟังก์ชั่น litllte ของฉันเพื่อรับโดเมนจริงจากสตริง

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;

    }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.