2008-08-22 12 views
181

प्राप्त करें .NET में वर्तमान प्रोटोकॉल, होस्ट और पोर्ट को तुरंत प्राप्त करने के लिए कोई आसान तरीका है? उदाहरण के लिए, अगर मैं निम्न URL पर हूँ:.NET - प्रोटोकॉल, होस्ट और पोर्ट

http://www.mywebsite.com:80/pages/page1.aspx

मैं वापस जाने के लिए की जरूरत है:

http://www.mywebsite.com:80

मैं जानता हूँ कि मैं Request.Url.AbsoluteUri उपयोग कर सकते हैं पूरा URL प्राप्त करने के लिए, और मुझे पता मैं होस्ट और पोर्ट प्राप्त करने के लिए Request.Url.Authority का उपयोग कर सकता हूं, लेकिन मुझे URL स्ट्रिंग को पार्स किए बिना प्रोटोकॉल प्राप्त करने का सबसे अच्छा तरीका सुनिश्चित नहीं है।

कोई सुझाव?

+0

Request.AbsoluteURI –

+1

एक simlar को मेरा उत्तर देखें यहां प्रश्न - http://stackoverflow.com/a/1534478/98740 – WDuffy

उत्तर

138

निम्नलिखित (सी #) कोड चाल

Uri uri = new Uri("http://www.mywebsite.com:80/pages/page1.aspx"); 
string requested = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port; 
+24

या स्ट्रिंग अनुरोध = uri.Scheme + Uri.SchemeDelimiter + uri.Authority; – tranmq

+11

यह तर्कसंगत गलत जवाब है क्योंकि यह कोई बंदरगाह नहीं होने पर भी ":" डालेगा। 'Uri.GetLeftPart' का उपयोग @ dthrasher के रूप में – gman

20

Request.Url आपको अनुरोध के Uri वापस कर देगा। एक बार आपके पास यह हो जाने के बाद, आप जो कुछ भी चाहते हैं उसे पुनः प्राप्त कर सकते हैं। प्रोटोकॉल प्राप्त करने के लिए, Scheme संपत्ति पर कॉल करें।

नमूना:

Uri url = Request.Url; 
string protocol = url.Scheme; 

आशा इस में मदद करता है।

339

हालांकि @Rick इस प्रश्न के लिए स्वीकार किए जाते हैं जवाब है वहाँ वास्तव में है यह करने के लिए, खराब नामित Uri.GetLeftPart() विधि का उपयोग कर एक छोटा तरीके से करना चाहिए।

Uri url = new Uri("http://www.mywebsite.com:80/pages/page1.aspx"); 
string output = url.GetLeftPart(UriPartial.Authority); 

हालांकि, GetLeftPart() पर एक पकड़ है। यदि पोर्ट योजना के लिए डिफ़ॉल्ट बंदरगाह है, तो यह इसे बाहर कर देगा। चूंकि पोर्ट 80 http के लिए डिफ़ॉल्ट पोर्ट है, ऊपर दिए गए उदाहरण में GetLeftPart() का आउटपुट http://www.mywebsite.com होगा।

यदि पोर्ट नंबर 80 से अधिक कुछ था, तो परिणाम में इसे शामिल किया जाएगा।

var scheme = Request.Url.Scheme; // will get http, https, etc. 
var host = Request.Url.Host; // will get www.mywebsite.com 
var port = Request.Url.Port; // will get the port 
var path = Request.Url.AbsolutePath; // should get the /pages/page1.aspx part, can't remember if it only get pages/page1.aspx 

मुझे आशा है कि इस मदद करता है:

+10

के रूप में करें मेरी राय में यह सबसे अच्छा उदाहरण है। यह लोकलहोस्ट के लिए काम करता है: बंदरगाह और लाइव उदाहरण। –

+0

सहमत +1 क्योंकि यह लोकलहोस्ट से काम करता है: पोर्ट –

+8

GetLeftPart - वास्तव में, ओएमजी अच्छा नामकरण। –

46

खैर अगर आप Asp.Net में यह कर रहे हैं या HttpContext.Current.Request की पहुंच है मैं इन उन्हें प्राप्त करने की आसान और अधिक सामान्य तरीके हैं कहेंगे । :)

+1

मैं इस विधि को पसंद करता हूं, मैं केवल उस चोटी को प्राप्त कर सकता हूं जिसे मैं चाहता हूं और इस बारे में चिंता करने की ज़रूरत नहीं है कि बंदरगाह प्राप्त करने के लिए स्ट्रिंग अच्छी तरह से बनाई गई है या नहीं। +1 – Jrud

+0

इन गुणों पर कुछ और विवरण: http://blog.jonschneider.com/2014/10/systemuri-net-framework-45-visual-guide.html –

23

उरीबिल्डर का उपयोग करने के लिए इसे और अधिक संरचित तरीका है। यह प्रत्यक्ष स्ट्रिंग मैनिपुलेशन से बचाता है।

var builder = new UriBuilder(Request.Url.Scheme, Request.Url.Host, Request.Url.Port); 
12

यहां तक ​​कि छोटे रास्ते, नए ASP.Net आवश्यकता हो सकती है:

string authority = Request.Url.GetComponents(UriComponents.SchemeAndServer,UriFormat.Unescaped) 

UriComponents enum आप जो यूआरआई के घटक (रों) आप शामिल करना चाहते निर्दिष्ट कर सकते हैं।

+1

ग्रेट, क्योंकि यह पीसीएल में काम करता है (.GetLeftPart() वहां उपलब्ध नहीं है) – Sascha

7

होल्गर के उत्तर के समान ही।

Uri uri = Context.Request.Url;   
var scheme = uri.Scheme // returns http, https 
var scheme2 = uri.Scheme + Uri.SchemeDelimiter; // returns http://, https:// 
var host = uri.Host; // return www.mywebsite.com 
var port = uri.Port; // returns port number 

Uri class तरीकों, कई जो मैं सूचीबद्ध नहीं किया है की एक पूरी श्रृंखला प्रदान करता है: आप यूआरएल की तरह कुछ कर सकते हैं हड़पने के लिए की जरूरत है।

मेरे उदाहरण में, मैं Port Number के साथ LocalHost हड़पने के लिए की जरूरत है, तो यह मैं क्या किया है:

var Uri uri = Context.Request.Url; 
var host = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port; 

जो सफलतापूर्वक पकड़ा: http://localhost:12345

संबंधित मुद्दे