ASP.NET में वर्तमान डोमेन नाम कैसे प्राप्त करें


84

मैं asp.net c # में वर्तमान डोमेन नाम प्राप्त करना चाहता हूं।

मैं इस कोड का उपयोग कर रहा हूं।

string DomainName = HttpContext.Current.Request.Url.Host;

मेरा URL है, localhost:5858लेकिन यह केवल वापस आ रहा है localhost।

अब, मैं लोकलहोस्ट में अपने प्रोजेक्ट का उपयोग कर रहा हूं। मैं लोकलहोस्ट करना चाहता हूं: 5858।

एक अन्य उदाहरण के लिए, जब मैं इस डोमेन का उपयोग कर रहा हूं

www.somedomainname.com

मैं पाना चाहता हूं somedomainname.com

कृपया मुझे एक विचार दें कि वर्तमान डोमेन नाम कैसे प्राप्त करें।


1
होस्टनाम और डोमेन नाम 2 अलग-अलग चीजें हैं। क्या आप एक ऐसा डोमेन चाहते हैं जो आपके विशिष्ट आईपी पते या मशीन के होस्टनाम पर मैप किया गया हो, जिस पर वह चलता है?
— रोब गुडविन


var base_url = "@ Request.Url.GetLeftPart (UriPartial.Authority) @ Url.Content (" ~ / ")"
— प्रिंस प्रसाद

जवाबों:


81

उपयोग करना Request.Url.Hostउचित है - यह है कि आप HTTP Host:हेडर के मूल्य को कैसे पुनः प्राप्त करते हैं , जो यह निर्दिष्ट करता है कि कौन सा होस्टनाम (डोमेन नाम) यूए (ब्राउज़र) चाहता है, क्योंकि HTTP अनुरोध के संसाधन-पथ भाग में होस्टनाम शामिल नहीं है।

ध्यान दें कि localhost:5858एक डोमेन नाम नहीं है, यह एक समापन बिंदु निर्दिष्टकर्ता है, जिसे "प्राधिकरण" के रूप में भी जाना जाता है, जिसमें होस्टनाम और टीसीपी टर्मिनल नंबर शामिल हैं। इसे एक्सेस करके पुनः प्राप्त किया जाता है Request.Uri.Authority।

इसके अलावा, इसे पाने के लिए मान्य नहीं है somedomain.comसे www.somedomain.comक्योंकि एक वेबसर्वर एक अलग साइट की सेवा करने के लिए विन्यस्त किया जा सकता है www.somedomain.comकी तुलना में somedomain.com, आप कर रहे हैं लेकिन यदि यकीन है कि यह तो आप की आवश्यकता होगी मैन्युअल रूप से होस्ट नाम पार्स अपने मामले में मान्य है, हालांकि का उपयोग कर, String.Split('.')में काम करता है एक चुटकी।

ध्यान दें कि वेबसर्वर (IIS) कॉन्फ़िगरेशन ASP.NET के कॉन्फ़िगरेशन से अलग है, और यह कि ASP.NET वास्तव में वेबसाइटों और वेब-अनुप्रयोगों के HTTP बाइंडिंग कॉन्फ़िगरेशन से पूरी तरह अनभिज्ञ है जो इसके अंतर्गत चलता है। तथ्य यह है कि IIS और ASP.NET दोनों एक ही विन्यास फाइल साझा करते हैं (web.config ) एक रेड-हेरिंग है।


120

Url का "बायां भाग" प्राप्त करने का प्रयास करें, जैसे:

string domainName = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority);

यह आपको या तो देगा http://localhost:5858या https://www.somedomainname.comआप स्थानीय या उत्पादन पर हैं। यदि आप ड्रॉप करना चाहते हैंwww भाग , तो आपको ऐसा करने के लिए IIS कॉन्फ़िगर करना चाहिए, लेकिन यह एक और विषय है।

ध्यान दें कि परिणामस्वरूप URL में अनुगामी स्लैश नहीं होगा।


7
मेरी राय में यह सबसे अच्छा जवाब होना चाहिए।
— एंड्रयू

इसने मेरी जरूरतों के लिए शानदार काम किया। एक छोटा सुधार, हालांकि: प्राधिकरण भाग का अनुरोध करते समय, लौटे स्ट्रिंग में अनुगामी पथ परिसीमन शामिल नहीं होगा। इस प्रकार:http://localhost:60333
— विल

1
var base_url = "@ Request.Url.GetLeftPart (UriPartial.Authority) @ Url.Content (" ~ / ")
— प्रिंस प्रसाद

1
यह Asp.Net Core 2.2 पर काम नहीं करता है। मुझे 'HttpContext' मिल रहा है, जिसमें 'Current' की कोई परिभाषा नहीं है और कोई सुलभ एक्सटेंशन विधि नहीं है 'Current' प्रकार के पहले तर्क को स्वीकार करते हुए 'HttpContext' पाया जा सकता है (क्या आप एक निर्देश या विधानसभा संदर्भ का उपयोग कर गायब हैं?)
— स्टियन

@Stian जाहिर है कि इसका जवाब देने वाला एक और पद है: stackoverflow.com/questions/31243068/… । यह उत्तर केवल यूआरआई भाग पर केंद्रित है।
— आर्टुरो टॉरेस सैंचेज़

42

यहां Request.RequestUriसभी के संदर्भ के लिए और इसके सभी गुणों का एक स्क्रीनशॉट है ।

यहां छवि विवरण दर्ज करें



6

www.somedomain.com है डोमेन / मेजबान। उपडोमेन एक महत्वपूर्ण हिस्सा है। www.अक्सर एक साथ नहीं होने के साथ परस्पर उपयोग किया जाता है, लेकिन इसे एक नियम के रूप में स्थापित किया जाना है (भले ही यह डिफ़ॉल्ट रूप से सेट किया गया हो) क्योंकि वे समकक्ष नहीं हैं। एक और उपडोमेन के बारे में सोचो, जैसे mx.। शायद इससे अलग लक्ष्य है www.।

यह देखते हुए, मैं इस तरह की बात नहीं करने की सलाह दूंगा। उस ने कहा, जब से तुम पूछ रहे हो मैं कल्पना करता हूं कि तुम्हारे पास एक अच्छा कारण है।

व्यक्तिगत रूप से, मैं इसके www.लिए विशेष-आवरण का सुझाव दूंगा ।

string host = HttpContext.Current.Request.Url.GetComponents(UriComponents.HostAndPort, UriFormat.Unescaped);;

if (host.StartsWith("www."))
    return host.Substring(4);
else
    return host;

अन्यथा, यदि आप वास्तव में 100% सुनिश्चित हैं कि आप किसी भी उपडोमेन को काटना चाहते हैं , तो आपको कुछ अधिक जटिल की आवश्यकता होगी।

string host = ...;

int lastDot = host.LastIndexOf('.');

int secondToLastDot = host.Substring(0, lastDot).LastIndexOf('.');

if (secondToLastDot > -1)
    return host.Substring(secondToLastDot + 1);
else
    return host;

बंदरगाह प्राप्त करना वैसा ही है जैसा अन्य लोगों ने कहा है।


1

HttpContext.Current.Request.Url.Host सही मान लौटा रहा है। यदि आप इसे www.somedomainname.com पर चलाते हैं तो यह आपको www.somedomainname.com देगा। यदि आप 5858 प्राप्त करना चाहते हैं और साथ ही आपको उपयोग करने की आवश्यकता है

HttpContext.Current.Request.Url.Port 

1

Request.ServerVariablesवस्तु मेरे लिए काम करता है। मैं इसका उपयोग नहीं करने का कोई कारण नहीं जानता।

ServerVariables["SERVER_NAME"]और ServerVariables["HTTP_URL"]जो आपको मिल रहा है वह मिलना चाहिए


1

आप पूरी तरह से योग्य डोमेन नाम पाने के लिए निम्न कोड आज़मा सकते हैं:

Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host

4
हालांकि यह कोड स्निपेट प्रश्न को हल कर सकता है, जिसमें स्पष्टीकरण सहित वास्तव में आपकी पोस्ट की गुणवत्ता में सुधार करने में मदद करता है। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और वे लोग आपके कोड सुझाव के कारणों को नहीं जान सकते हैं।
— डॉ। रॉब लैंग

1

यहां केवल एक आसान तरीका है कि आप केवल यूआरएल का नाम प्राप्त करें।

            var urlHost = HttpContext.Current.Request.Url.Host;

            var xUrlHost = urlHost.Split('.');
            foreach(var thing in xUrlHost)
            {
                if(thing != "www" && thing != "com")
                {
                    urlHost = thing;
                }
            }


0

उप डोमेन के साथ भी MVC में आधार URL प्राप्त करने के लिए www.somedomain.com/subdomain:

var url = $"{Request.Url.GetLeftPart(UriPartial.Authority)}{Url.Content("~/")}";

0

मैं asp.net कोर 3.1 में इस तरह का उपयोग करें

 var url =Request.Scheme+"://"+ Request.Host.Value;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.