ฉันจะรับ URI โดเมนรากใน ASP.NET ได้อย่างไร


98

สมมติว่าฉันพื้นที่เว็บไซต์ที่http://www.foobar.com

มีวิธีใดบ้างที่ฉันสามารถตรวจสอบ " http://www.foobar.com/ " ในโค้ดของฉันโดยทางโปรแกรมได้(เช่นโดยไม่ต้องฮาร์ดโค้ดในการกำหนดค่าเว็บ)


7
เนื่องจากขึ้นอยู่กับคำขอคุณอาจลองค้นหาในRequestวัตถุ
John Saunders

คำตอบ:


81

HttpContext.Current.Request.Urlสามารถรับข้อมูลทั้งหมดใน URL และสามารถแยก url ออกเป็นส่วนย่อย ๆ


4
ใช่ทำไมโหวตลง? อย่าเห็นสิ่งที่ทำเครื่องหมายว่าเป็นคำตอบและโหวตลงบ่อยๆ : /
Zack

4
ฉันยังไม่ชอบคำตอบนี้ blesh ให้สิ่งที่ถูกต้องและสิ่งนี้ควรถูกทำเครื่องหมายว่าเป็นคำตอบ ...
คาลบี

-1 - Request.Url มักจะให้ url เช่น "/ folder1 / folder2" และไม่รวมโดเมนทั้งหมด
Justin

4
@ จัสติน: Request.Url ให้วัตถุ Uri แก่คุณซึ่งมีชิ้นส่วนทั้งหมดแยกย่อยให้คุณ ไม่ควรให้คุณเป็นสตริง อย่างน้อยก็ไม่ใช่ในเวอร์ชันของ. net ที่ฉันใช้
JoshBerke

6
คำตอบนี้สามารถปรับปรุงได้โดยการเพิ่มโค้ดที่ทำให้ใช้งานได้เหมือนคำตอบด้านล่างที่มีคะแนนโหวตมากขึ้น ...
theJerm

172
string baseUrl = Request.Url.GetLeftPart(UriPartial.Authority);

Uri :: GetLeftPart วิธีการ :

เมธอด GetLeftPart จะส่งคืนสตริงที่มีส่วนซ้ายสุดของสตริง URI ซึ่งลงท้ายด้วยส่วนที่ระบุโดยส่วนหนึ่ง

UriPartial Enumeration :

โครงการและส่วนอำนาจของ URI


5
ดีกว่ามากแล้วแยกวิเคราะห์ URL!
Evgenyt

1
นี่คือคำตอบที่ดีที่สุด! tnx!
AminM

นี่ควรเป็นคำตอบที่เลือก การจัดการสตริงมากเกินไปที่ไม่จำเป็น
Ghasan

1
ใช้วิธีนี้ http: // www.lala.xxx/blah/blah จะกลับมา http: // www.lala.xxx
live-love

+1 และไม่เหมือนกับ. เจ้าหน้าที่ซึ่ง - ในการทดสอบที่ฉันทำบน localhost - ออกจากส่วนโปรโตคอล (http: //)
GGleGrand

122

สำหรับทุกคนที่ยังคงสงสัยว่าคำตอบที่สมบูรณ์มากขึ้นสามารถใช้ได้ที่http://devio.wordpress.com/2009/10/19/get-absolut-url-of-asp-net-application/

public string FullyQualifiedApplicationPath
{
    get
    {
        //Return variable declaration
        var appPath = string.Empty;

        //Getting the current context of HTTP request
        var context = HttpContext.Current;

        //Checking the current context content
        if (context != null)
        {
            //Formatting the fully qualified website url/name
            appPath = string.Format("{0}://{1}{2}{3}",
                                    context.Request.Url.Scheme,
                                    context.Request.Url.Host,
                                    context.Request.Url.Port == 80
                                        ? string.Empty
                                        : ":" + context.Request.Url.Port,
                                    context.Request.ApplicationPath);
        }

        if (!appPath.EndsWith("/"))
            appPath += "/";

        return appPath;
    }
}

4
ทำงานได้อย่างสมบูรณ์แบบ หากไซต์เป็นเซิร์ฟเวอร์: 8080 / MySiteName แสดงว่าไซต์นั้นถูกต้อง
Michael La Voie

2
ขอขอบคุณที่แบ่งปันรหัสจริงแทนลิงก์ที่อื่น
theJerm

2
context.Request.Url.Port == 80 จะทำให้เกิดปัญหาภายใน HTTPS
Evgenyt

7
โปรดทราบ! ไม่ทำงานสำหรับ https สำหรับ https จำเป็นต้องแทนที่ context.Request.Url.Port == 80 ด้วย(context.Request.Url.Port == 80 && context.Request.Url.Scheme == "http") || (context.Request.Url.Port == 443 && context.Request.Url.Scheme == "https")หรือใช้คำตอบด้านล่าง
razon

1
ใช้งานได้กับ localhost (หากคุณกำลังทดสอบ localy) หากคุณไม่ต้องการพอร์ตคุณสามารถใช้ "http: //" + HttpContext.Current.Request.Url.Host;
CyberHawk

36

หาก URL ตัวอย่างคือhttp://www.foobar.com/Page1

HttpContext.Current.Request.Url; //returns "http://www.foobar.com/Page1"


HttpContext.Current.Request.Url.Host; //returns "www.foobar.com"


HttpContext.Current.Request.Url.Scheme; //returns "http/https"


HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority); //returns "http://www.foobar.com"

1
ไม่ไม่ .Hostของ"http://www.foobar.com/Page1"เป็นไม่ได้www.foobar.com foobar.com
tchelidze

1
ใช่คุณพูดถูกอัปเดตคำตอบ @tchelidze ขอบคุณ
Dheeraj Palagiri


16

หากต้องการรับสตริง URL คำขอทั้งหมด:

HttpContext.Current.Request.Url

หากต้องการรับส่วน www.foo.com ของคำขอ:

HttpContext.Current.Request.Url.Host

โปรดทราบว่าในระดับหนึ่งคุณได้รับความเมตตาจากปัจจัยภายนอกแอปพลิเคชัน ASP.NET ของคุณในระดับหนึ่ง หากมีการกำหนดค่า IIS ให้ยอมรับหลายส่วนหรือส่วนหัวของโฮสต์สำหรับแอปพลิเคชันของคุณโดเมนใด ๆ ที่แก้ไขไปยังแอปพลิเคชันของคุณผ่าน DNS อาจแสดงเป็น URL คำขอขึ้นอยู่กับว่าผู้ใช้ป้อนข้อมูลใด


1
ทางออกที่ง่ายที่สุดที่นี่
full_prog_full

4
Match match = Regex.Match(host, "([^.]+\\.[^.]{1,3}(\\.[^.]{1,3})?)$");
string domain = match.Groups[1].Success ? match.Groups[1].Value : null;

host.com => return host.com
s.host.com => return host.com

host.co.uk => return host.co.uk
www.host.co.uk => return host.co.uk
s1.www.host.co.uk => return host.co.uk


ฉันรู้ว่านี่เป็นโพสต์เก่า แต่ NQuenault ทำได้ดีมากฉันไม่ค่อยดีที่ Regex Expressions ทำได้ดีมาก สิ่งที่ฉันต้องการ
JeffreyJ

@nquenault มีความคิดเห็นเกี่ยวกับวิธีจัดการชื่อโฮสต์อย่าง www.abc.com อย่างไรให้ดีที่สุด ขอบคุณ!
Gary Ewan Park



3

ฉันรู้ว่ามันเก่ากว่านี้ แต่วิธีที่ถูกต้องในการทำตอนนี้คือ

string Domain = HttpContext.Current.Request.Url.Authority

ซึ่งจะได้รับ DNS หรือที่อยู่ IP พร้อมพอร์ตสำหรับเซิร์ฟเวอร์



1

C # ตัวอย่างด้านล่าง:

string scheme = "http://";
string rootUrl = default(string);
if (Request.ServerVariables["HTTPS"].ToString().ToLower() == "on")
{
  scheme = "https://";
}
rootUrl = scheme + Request.ServerVariables["SERVER_NAME"].ToString();


1

สิ่งนี้จะส่งคืนสิ่งที่คุณถามโดยเฉพาะ

Dim mySiteUrl = Request.Url.Host.ToString()

ฉันรู้ว่านี่เป็นคำถามที่เก่ากว่า แต่ฉันต้องการคำตอบง่ายๆเหมือนกันและสิ่งนี้จะส่งกลับสิ่งที่ถาม (โดยไม่มี http: //)

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