मैं ASP.NET में रूट डोमेन URI कैसे प्राप्त कर सकता हूं?


96

मान लीजिए कि मैं एक वेबसाइट http://www.foobar.com पर होस्ट कर रहा हूं ।

क्या कोई ऐसा तरीका है जिससे मैं प्रोग्रामिक रूप से " http://www.foobar.com/ " को अपने कोड में (यानी अपने वेब कॉन्फिग में इसे हार्डकोड किए बिना) पता लगा सकता हूं ?


7
चूंकि यह अनुरोध पर निर्भर करता है, आप Requestवस्तु में देखने का प्रयास कर सकते हैं ।
जॉन सॉन्डर्स

जवाबों:


79

HttpContext.Current.Request.Url आप URL पर सभी जानकारी प्राप्त कर सकते हैं। और इसके टुकड़ों में यूआरएल को तोड़ सकता है।


4
हां, नीचे वोट क्यों? उत्तर के रूप में चिह्नित कुछ न देखें -और अक्सर डाउनवोट किया जाता है। : /
जैक

4
मुझे भी यह जवाब पसंद नहीं है। blesh ने सही दिया है और इसे उत्तर के रूप में चिह्नित किया जाना चाहिए ...
Michal B.

-1 - Request.Url अक्सर "/ folder1 / folder2" के रूप में एक यूआरएल देता है और डोमेन को पूरी तरह से बाहर कर देता है।
जस्टिन

4
@Justin: Request.Url आपको एक उड़ी वस्तु देता है जिसमें आपके लिए सभी टुकड़े टूट गए हैं। यह आपको एक तार नहीं देना चाहिए। कम से कम नहीं के संस्करण में .net मैं का उपयोग कर रहा हूँ
जोशबर्के

6
इस उत्तर कोड यह जवाब की तरह काम नीचे कि और वोट है कि बनाता है जोड़कर सुधार किया जा सकता ...
theJerm

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

उरी :: GetLeftPart विधि :

GetLeftPart पद्धति एक स्ट्रिंग देता है जिसमें URI स्ट्रिंग के सबसे बाएं हिस्से होते हैं, भाग द्वारा निर्दिष्ट भाग के साथ समाप्त होता है।

यूरपार्टियल एन्यूमरेशन :

URI की स्कीम और अथॉरिटी सेगमेंट।


5
बहुत बेहतर है तो Url को पार्स करना!
एवेरिटैट

1
यह सबसे अच्छा जवाब है! tnx!
अमीनम

यह चयनित उत्तर होना चाहिए। बहुत सारे स्ट्रिंग हेरफेर जो अनावश्यक हैं।
घासन G

1
इस विधि का उपयोग करके, http: // www.lala.xxx/blah/blah http: // www.lala.xxx
लाइव-लव

+1 और वैसा ही नहीं है। जैसा कि मैंने स्थानीयहोस्ट पर किए गए परीक्षणों में - प्रोटोकॉल (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 है , तो यह सही ढंग से हो जाता है।
माइकल ला वोय

2
कहीं और लिंक के बजाय वास्तविक कोड साझा करने के लिए धन्यवाद।
theJerm

2
संदर्भ।
Request.Url.Port

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
लोकलहोस्ट के लिए भी काम करता है (यदि आप लोकल टेस्ट कर रहे हैं)। यदि आपको पोर्ट की आवश्यकता नहीं है, तो आप "http: //" + HttpContext.Current.Request.Url.ost का उपयोग कर सकते हैं;
साइबर हॉक

32

यदि उदाहरण उरल 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 धन्यवाद
धीरज पालगिरी


16

संपूर्ण अनुरोध URL स्ट्रिंग प्राप्त करने के लिए:

HttpContext.Current.Request.Url

अनुरोध के www.foo.com भाग पाने के लिए:

HttpContext.Current.Request.Url.Host

ध्यान दें कि आप कुछ हद तक अपने ASP.NET अनुप्रयोग के बाहर कारकों की दया पर हैं। यदि IIS आपके एप्लिकेशन के लिए कई या किसी भी होस्ट हेडर को स्वीकार करने के लिए कॉन्फ़िगर किया गया है, तो उन डोमेन में से कोई भी जो DNS के माध्यम से आपके आवेदन का समाधान करता है, अनुरोध यूआरएल के रूप में प्रदर्शित हो सकता है, जिसके आधार पर उपयोगकर्ता ने प्रवेश किया था।


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 => वापसी host.com

host.co.uk => वापसी host.co.uk
www.host.co.uk => वापसी host.co.uk
s1.www.host.co.uk => वापसी host.co.uk


मुझे लगता है कि यह एक पुरानी पोस्ट है, लेकिन अच्छी तरह से किया NQuenault, मैं Regex एक्सप्रेशंस में इतना अच्छा नहीं हूं। वास्तव में मुझे जो चाहिए था।
जेफरीजे

@ किसी भी विचार पर www.abc.com जैसे होस्ट नाम को कैसे हैंडल करना सबसे अच्छा है? धन्यवाद!
गैरी इवान पार्क

4

- IIS एक्सप्रेस चलाने पर पोर्ट को एड करना मदद कर सकता है

Request.Url.Scheme + "://" + Request.Url.Host + ":" + Request.Url.Port


3

मुझे पता है कि यह पुराना है लेकिन अब ऐसा करने का सही तरीका है

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

सर्वर के लिए पोर्ट के साथ DNS या आईपी एड्रेस मिलेगा।



1

नीचे # उदाहरण

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

1
string host = Request.Url.Host;
Regex domainReg = new Regex("([^.]+\\.[^.]+)$");
HttpCookie cookie = new HttpCookie(cookieName, "true");
if (domainReg.IsMatch(host))
{
  cookieDomain = domainReg.Match(host).Groups[1].Value;                                
}

1

यह विशेष रूप से आप क्या पूछ रहे हैं वापस आ जाएगी।

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

मुझे पता है कि यह एक पुराना सवाल है। लेकिन मुझे उसी सरल उत्तर की आवश्यकता थी और यह वही है जो (http: // के बिना) पूछा जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.