.NET - प्रोटोकॉल, होस्ट और पोर्ट प्राप्त करें


228

क्या वर्तमान प्रोटोकॉल, होस्ट और पोर्ट को जल्दी से प्राप्त करने के लिए .NET में एक सरल तरीका है? उदाहरण के लिए, यदि मैं निम्नलिखित URL पर हूं:

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

मुझे लौटने की आवश्यकता है:

http://www.mywebsite.com:80

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

कोई सुझाव?


1
यहाँ एक simlar प्रश्न के लिए मेरा जवाब देखें - stackoverflow.com/a/1534478/98740
WDuffy

जवाबों:


172

निम्नलिखित (C #) कोड को चाल करना चाहिए

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

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

17
यह यकीनन गलत जवाब है क्योंकि यह पोर्ट नहीं होने पर भी ":" डालेगा। उपयोग Uri.GetLeftPartबाहर @dthrasher अंक के रूप में
GMAN

ध्यान दें कि कुछ मामलों में, आप अभी भी uri.Headers के साथ संक्षिप्त करना चाहते हैं। ["होस्ट"] GetLeftPart () के बजाय, जैसे एक प्रॉक्सी के पीछे आपकी सेवा एक अलग / गैर-मानक पोर्ट पर सुन रही हो सकती है और यदि आप उस यूआरएल को अंदर करते हैं। एक कॉलबैक (निजी पोर्ट के साथ) होस्ट अगम्य होगा।
doveryai

408

भले ही @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 के अलावा कुछ और थी, तो इसे परिणाम में शामिल किया जाएगा।


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

13
GetLeftPart - वास्तव में, OMG अच्छा नामकरण।
वैलेंटाइन कुजब

किसी को भी पता है कि क्या इस यूआरएल के एक सामान्य नाम का हिस्सा है? जावास्क्रिप्ट में इसे उत्पत्ति कहा जाता है, लेकिन मुझे यकीन नहीं है कि यह सार्वभौमिक रूप से सहमत है: serverfault.com/questions/757494/…
डर्क बोअर

1
Microsoft इसके लिए "प्राधिकरण" शब्द का उपयोग करता है, लेकिन मुझे नहीं पता कि यह एक मानक शब्द है। देखें stackoverflow.com/questions/2142910/...
dthrasher

1
मुझे व्यक्तिगत रूप से Uriइस तरह से कक्षा का उपयोग करना पसंद नहीं है । ऐसे मामलों की एक भीड़ है जहां यह निर्माता एक अपवाद को फेंक देगा। अधिकांश मामलों के लिए, मैं अपना कोड हाथ में कार्य को समाप्त करने से पहले थोड़ा और क्षमा करना पसंद करता हूं।
जोनाथन वुड

60

यदि आप Asp.Net में ऐसा कर रहे हैं या HttpContext.Current.Request तक पहुँच है, तो मैं कहूँगा कि ये आसान और अधिक सामान्य तरीके हैं:

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

आशा है कि ये आपकी मदद करेगा। :)


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

इन संपत्तियों पर कुछ और विवरण: blog.jonschneider.com/2014/10/…
जॉन श्नाइडर

33

इसे प्राप्त करने के लिए एक अधिक संरचित तरीका है UriBuilder का उपयोग करना। यह सीधे स्ट्रिंग हेरफेर से बचा जाता है।

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

23

Request.Url आपको रिक्वेस्ट का Uri लौटा देगा । एक बार जब आप ऐसा कर लेते हैं, तो आप अपनी इच्छानुसार बहुत कुछ प्राप्त कर सकते हैं। प्रोटोकॉल प्राप्त करने के लिए, स्कीम प्रॉपर्टी पर कॉल करें ।

नमूना:

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

उम्मीद है की यह मदद करेगा।


20

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

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

UriCompords enum आपको यह निर्दिष्ट करने देता है कि आप URI के किस घटक को शामिल करना चाहते हैं।


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

10

होल्गर के जवाब के समान। अगर आपको URL को हथियाने की ज़रूरत है तो कुछ ऐसा कर सकते हैं:

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

उरी वर्ग के तरीकों की एक पूरी श्रृंखला, कई जो मैं सूचीबद्ध नहीं किया है प्रदान करता है।

मेरे उदाहरण में, मुझे LocalHostसाथ-साथ चलने की जरूरत थी Port Number, इसलिए मैंने यही किया:

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

जिसे सफलतापूर्वक पकड़ा गया: http://localhost:12345

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