मैं उस पृष्ठ का पूर्ण URL कैसे प्राप्त करूं जो मैं C # पर हूं


163

मुझे उस पेज का पूरा URL प्राप्त करने में सक्षम होना चाहिए जो मैं उपयोगकर्ता नियंत्रण से हूं। क्या यह केवल एक साथ अनुरोध चर के एक समूह को बदलने की बात है? यदि हां, तो कौन? या वहाँ एक और अधिक simpiler तरीका है?


6
भारित वेबफ़ार्म में किसी को भी .. System.Url का उपयोग करते समय दिखाई देने वाली पोर्ट संख्या से सावधान रहें: stackoverflow.com/questions/7674850/…
felickz

जवाबों:


155

मैं आमतौर पर Request.Url.ToString()पूर्ण url (querystring सहित) प्राप्त करने के लिए उपयोग करता हूं , इसके लिए आवश्यक कोई सहमति नहीं है।


2
यदि URL में '#' है तो # के बाद का सभी वर्ण शामिल नहीं होगा।
क्रुणाल सिसोदिया

5
@KrunalSisodiya मुझे नहीं लगता कि किसी URL का हैश कभी सर्वर पर भेजा जाता है, लेकिन मैं गलत हो सकता है।
ट्रैविस

1
Request.Url.ToString()क्वेरीस्ट्रिंग शामिल नहीं है।
योगेश पटेल

320

इस प्रकार की जानकारी के लिए मैं आमतौर पर एक सूची प्रस्तुत करता हूं:

Request.ApplicationPath :   /virtual_dir
Request.CurrentExecutionFilePath :  /virtual_dir/webapp/page.aspx
Request.FilePath :  /virtual_dir/webapp/page.aspx
Request.Path :  /virtual_dir/webapp/page.aspx
Request.PhysicalApplicationPath :   d:\Inetpub\wwwroot\virtual_dir\
Request.QueryString :   /virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.AbsolutePath :  /virtual_dir/webapp/page.aspx
Request.Url.AbsoluteUri :   http://localhost:2000/virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.Host :  localhost
Request.Url.Authority : localhost:80
Request.Url.LocalPath : /virtual_dir/webapp/page.aspx
Request.Url.PathAndQuery :  /virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.Port :  80
Request.Url.Query : ?q=qvalue
Request.Url.Scheme :    http
Request.Url.Segments :  /
    virtual_dir/
    webapp/
    page.aspx

उम्मीद है आपको यह उपयोगी लगेगा!


1
1) अनुरोध भी है। RawUrl; 2) Request.Url 'बहुत खराब अनुरोधित रास्तों' पर एक अपवाद फेंक सकता है।
user2864740

बहुत उपयोगी उत्तर, लेकिन क्या पोर्ट नंबर भ्रम से बचने के लिए अनुरूप नहीं होना चाहिए (सभी उदाहरणों को एक ही अनुरोध के लिए माना जाता है; उदाहरण के लिए, अथॉरिटी और पोर्ट इम्प्लीमेंट पोर्ट 80 लेकिन एब्सोल्यूटयूरी में पोर्ट 2000 शामिल हैं)
यंग बॉब

Request.QueryStringq=qvalueकेवल रिटर्न
मार्सेल

74
Request.Url.AbsoluteUri

यह संपत्ति आपकी जरूरत की हर चीज, एक सक्सेस कॉल में सब करती है।


6
+1। यह सबसे अच्छा जवाब है। अनुरोध पर प्राथमिकता दी जानी चाहिए। Url.ToString ()।
टोड मेनियर

10

इसके लिए ASP.NET Coreआपको इसे वर्तनी की आवश्यकता होगी:

@($"{Context.Request.Scheme}://{Context.Request.Host}{Context.Request.Path}{Context.Request.QueryString}")

या आप अपने विचार में एक उपयोग कथन जोड़ सकते हैं:

@using Microsoft.AspNetCore.Http.Extensions

फिर

@Context.Request.GetDisplayUrl()

उसके _ViewImports.cshtmlलिए बेहतर जगह हो सकती है@using


1
धन्यवाद। इससे मदद मिली!
फ्लाइंग वी


9

अगर आपको http से लेकर querystring तक सभी पूर्ण URL की आवश्यकता है, तो आपको निम्न चर को संक्षिप्त करना होगा

Request.ServerVariables("HTTPS") // to check if it's HTTP or HTTPS
Request.ServerVariables("SERVER_NAME") 
Request.ServerVariables("SCRIPT_NAME") 
Request.ServerVariables("QUERY_STRING")

2
यह गैर-मानक बंदरगाहों को ध्यान में नहीं रखता है (अर्थात http के लिए पोर्ट 80 का उपयोग नहीं कर रहा है)
Spongeboy

1
आप पोर्ट डिटेक्शन के लिए Request.ServerVariables ("SERVER_PORT") का उपयोग कर सकते हैं!
आर्मेन

1
ध्यान दें कि यह उत्तर VB.Net सिंटैक्स का उपयोग करता है। C # में, उदाहरण के लिए Request.ServerVariables ["HTTPS"] का उपयोग करें।
jaycer

7

( MSDN के अनुसार ) Request.Url.OriginalStringसे बेहतर उपयोग करने के लिएRequest.Url.ToString()


यह केवल बेहतर है अगर आपको वास्तव में मूल स्ट्रिंग की आवश्यकता है।
डिर्क

@DirkThe लिंक के ऊपर MSDN से: "स्ट्रिंग विधि द्वारा लौटाए गए स्ट्रिंग में नियंत्रण वर्ण हो सकते हैं, जो कंसोल एप्लिकेशन की स्थिति को दूषित कर सकते हैं। आप लौटी स्ट्रिंग से नियंत्रण वर्णों को हटाने के लिए UriFormat.SafeUnesed प्रारूप के साथ GetCompords पद्धति का उपयोग कर सकते हैं। । "
Eni

वास्तव में, और इसका कोई लेना-देना नहीं है OriginalString
डर्क

5

धन्यवाद दोस्तों, मैंने अपनी विशिष्ट आवश्यकता के लिए आपके उत्तर @Christian और @Jonathan दोनों के संयोजन का उपयोग किया।

"http://" + Request.ServerVariables["SERVER_NAME"] +  Request.RawUrl.ToString()

मुझे सुरक्षित http के बारे में चिंता करने की आवश्यकता नहीं है, सर्वरनाम चर की जरूरत है और RawUrl डोमेन नाम से पथ को संभालता है और यदि मौजूद है तो क्वेरिस्ट्रिंग भी शामिल है।


2
आपको यह भी पता होना चाहिए कि अनुरोध के विपरीत RawUrl, मूल का प्रतिनिधित्व करता है, अगर url मैपिंग का उपयोग किया जा रहा है, तो मूल, अनमैप किए गए अनुरोध URL का प्रतिनिधित्व करता है।
हार्पो

SERVER_NAME अक्सर क्लाइंट द्वारा उपयोग किए जाने वाले "वास्तविक" URL को वापस नहीं करता है। HTTP_HOST सीधे रूप में खोदने जा रहा है तो शायद बेहतर रूप है .. सरल HTTP-to-other-port को भी याद करता है।
user2864740

1

यदि आपको पोर्ट नंबर की भी आवश्यकता है, तो आप उपयोग कर सकते हैं

Request.Url.Authority

उदाहरण:

string url = Request.Url.Authority + HttpContext.Current.Request.RawUrl.ToString();

if (Request.ServerVariables["HTTPS"] == "on")
{
    url = "https://" + url;
}
else 
{
    url = "http://" + url;
}

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