Asp.net core 1.0 में देखने के लिए वर्तमान url कैसे प्राप्त करें


102

Asp.net के पिछले संस्करणों में, हम उपयोग कर सकते हैं

@Request.Url.AbsoluteUri

लेकिन ऐसा लगता है कि यह बदल गया है। हम asp.net कोर 1.0 में कैसे कर सकते हैं?



6
@DavidG ऐसा प्रतीत होता है कि अब आप UriHelper.GetDisplayUrl (पुनः खोज) का उपयोग कर सकते हैं
मार्क जी

जवाबों:


121

आपको मेजबान और रास्ता अलग से प्राप्त करना होगा।

 @Context.Request.Host@Context.Request.Path

14
यह सही url की रिपोर्ट नहीं करेगा यदि आप ऐप एक आभासी निर्देशिका में बैठे हैं। आप उपसर्ग करने की आवश्यकता होगी Request.Path साथ मूल्य Request.PathBase मूल्य अगर वहाँ एक है। यह इस प्रश्न के लगभग सभी अन्य उत्तरों पर भी लागू होता है।
पैडीगन

यह @दो तारों के बीच क्या है ? क्या आप इसे समझा सकते हैं?
मोहम्मद नौरेलिन

3
@MohammedNoureldin: यह रेजर व्यू सिंटैक्स है।
जैक.पॉप २५'१ at को

2
रेजर पृष्ठों के लिए मुझे @HttpContextइसके बजाय उपयोग करना था @Context। आंशिक विचारों के लिए @Contextकाम करता है। क्या मैं एक प्रयोग भूल गया?
एंड्रियोड

2
MVC Url.Action("Action", null, null, Request.Url.Scheme); stackoverflow.com/questions/434604/…
Dan

110

आपको स्कीम, होस्ट, पाथ और क्वेरीस्ट्रिंग की आवश्यकता है

@string.Format("{0}://{1}{2}{3}", Context.Request.Scheme, Context.Request.Host, Context.Request.Path, Context.Request.QueryString)

या नए C # 6 फीचर का उपयोग करके "स्ट्रिंग इंटरपोलेशन"

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

1
आपको टुकड़ा कैसे मिलता है, test.com/abc#123 कहते हैं , आपको अनुरोध से # 123 टुकड़ा कैसे मिलता है?
रे

4
@fanray आप नहीं कर सकते। ब्राउज़र्स URI- टुकड़े को सर्वर पर नहीं भेज रहे हैं
tmg

Url बनाने के लिए UriBuilder के उपयोग पर विचार करें ।
एरिक फिलिप्स

84

आप एक्सटेंशन विधि का उपयोग कर सकते हैं Request:

Request.GetDisplayUrl()

33
यह @using Microsoft.AspNetCore.Http.Extensionsतब काम करता है जब आप जोड़ते हैं@Context.Request.GetDisplayUrl()
सर्ज सगन

2
अभी भी हो रही है - अनुरोध वर्तमान संदर्भ में मौजूद नहीं है
SeanMC

1
इस समारोह के लिए अमूर्त सारांश को ध्यान में रखें कहते हैं इसके Suitable only for display. This format should not be used in HTTP headers or other HTTP operations.आधार पर, मुझे लगता है कि @ tmg का समाधान सबसे अच्छा है (शायद आपके अपने विस्तार विधि में लिपटे हुए हैं)।
गॉर्डन ग्लास

16

यह .net कोर 1.0 के साथ जाहिरा तौर पर हमेशा संभव था Microsoft.AspNetCore.Http.Extensions, जो HttpRequestपूर्ण URL प्राप्त करने के लिए एक्सटेंशन जोड़ता है ; GetEncodedUrl

रेजर दृश्य से:

@using Microsoft.AspNetCore.Http.Extensions
...
<a href="@Context.Request.GetEncodedUrl()">Link to myself</a>

2.0 के बाद से, सापेक्ष पथ और क्वेरी GetEncodedPathAndQuery भी है


15

Uri की AbsoluteUri संपत्ति का उपयोग करें , .Net कोर के साथ आपको इस तरह के अनुरोध से उड़ी का निर्माण करना होगा,

 var location = new Uri($"{Request.Scheme}://{Request.Host}{Request.Path}{Request.QueryString}");

 var url = location.AbsoluteUri;

उदाहरण के लिए, यदि अनुरोध url ' http://www.contoso.com/catalog/shownew.htm?date=today ' है तो यह उसी url को लौटा देगा।


8
इस तरह की बातें मुझे लगता है। नेट कोर कुछ मायनों में एक कदम पीछे है। क्या यह अनुरोध से बेहतर है। Asp.Net में कुछ इस तरह से कि मैं कल्पना करने में असमर्थ हूं?
सोहने

8

आप इस विस्तार विधि का उपयोग करने के लिए विचार कर सकते हैं ( Microsoft.AspNetCore.Http.Extensionsनाम स्थान से:

@Context.Request.GetDisplayUrl()

मेरी कुछ परियोजनाओं के लिए मैं अधिक लचीला समाधान पसंद करता हूं। दो विस्तार विधियाँ हैं।

1) पहला तरीका Uriआने वाले अनुरोध डेटा (वैकल्पिक मापदंडों के माध्यम से कुछ वेरिएंट के साथ ) से ऑब्जेक्ट बनाता है । 2) दूसरी विधि Uriवस्तु प्राप्त करती है और stringनिम्नलिखित प्रारूप में रिटर्न (बिना अनुगामी स्लैश के): Scheme_Host_Port

public static Uri GetUri(this HttpRequest request, bool addPath = true, bool addQuery = true)
    {
        var uriBuilder = new UriBuilder
        {
            Scheme = request.Scheme,
            Host = request.Host.Host,
            Port = request.Host.Port.GetValueOrDefault(80),
            Path = addPath ? request.Path.ToString() : default(string),
            Query = addQuery ? request.QueryString.ToString() : default(string)
        };
        return uriBuilder.Uri;
    }

    public static string HostWithNoSlash(this Uri uri)
    {
        return uri.GetComponents(UriComponents.SchemeAndServer, UriFormat.UriEscaped);
    }

उपयोग:

//before >> https://localhost:44304/information/about?param1=a&param2=b
        Request.GetUri(addQuery: false);
        //after >> https://localhost:44304/information/about

        //before >> https://localhost:44304/information/about?param1=a&param2=b
        new Uri("https://localhost:44304/information/about?param1=a&param2=b").GetHostWithNoSlash();
        //after >> https://localhost:44304

7
public string BuildAbsolute(PathString path, QueryString query = default(QueryString), FragmentString fragment = default(FragmentString))
{
    var rq = httpContext.Request;
    return Microsoft.AspNetCore.Http.Extensions.UriHelper.BuildAbsolute(rq.Scheme, rq.Host, rq.PathBase, path, query, fragment);
}

लेकिन तुम कहाँ हो रही है httpContext? इसके साथ काम नहीं करने वाला है Microsoft.AspNetCore.Http.HttpContext.Request
टॉम स्टिकेल

7

यदि आप अनुरोध से पोर्ट नंबर प्राप्त करना चाहते हैं, तो आपको इसे Request.HostAspNet Core के लिए प्रॉपर्टी के माध्यम से एक्सेस करना होगा ।

Request.Hostसंपत्ति नहीं बस एक स्ट्रिंग के बजाय, एक वस्तु है कि दोनों होस्ट डोमेन रखती है, लेकिन, और पोर्ट संख्या। यदि पोर्ट नंबर को विशेष रूप से URL (यानी ) में लिखा गया है "https://example.com:8080/path/to/resource", तो कॉलिंग Request.Hostआपको होस्ट डोमेन और पोर्ट नंबर देगा जैसे "example.com:8080":।

आप केवल होस्ट डोमेन के लिए मूल्य चाहते हैं या केवल पोर्ट नंबर के लिए मूल्य तो आप उन गुणों को व्यक्तिगत रूप से (यानी उपयोग कर सकते हैं चाहता हूँ Request.Host.Hostया Request.Host.Port)।


6

स्वीकृत उत्तर ने मेरी मदद की, जैसा कि @padigan से इसके लिए टिप्पणी की गई थी, लेकिन यदि आप क्वेरी-स्ट्रिंग मापदंडों को शामिल करना चाहते हैं, जैसा कि मेरे लिए मामला था, तो यह प्रयास करें:

@Context.Request.PathBase@Context.Request.GetEncodedPathAndQuery()

और आपको @using Microsoft.AspNetCore.Http.Extensionsउपलब्ध होने के लिए GetEncodedPathAndQuery () विधि के लिए दृश्य में जोड़ना होगा।


1

रेजर पेज या पेजमॉडल वर्ग से वर्तमान URL प्राप्त करने का एक साफ तरीका है। अर्थात्:

Url.PageLink()

कृपया ध्यान दें कि मेरा मतलब था, "ASP.NET Core Razor Pages ", MVC नहीं।

जब मैं ASP.NET कोर रेजर पृष्ठों में कैनोनिकल URL मेटा टैग प्रिंट करना चाहता हूं तो मैं इस पद्धति का उपयोग करता हूं। लेकिन वहां एक जाल है। यह आपको वह URL देगा जो उस पेज के लिए सही URL माना जाता है। मुझे समझाने दो।

कहते हैं, आपने अपने पृष्ठ के लिए "आईडी" नाम का एक मार्ग निर्धारित किया है और इसलिए, आपका URL जैसा दिखना चाहिए

http://example.com/product?id=34

Url.PageLink () आपको वह URL देगा जैसा कि ऊपर दिखाया गया है।

अब, यदि उपयोगकर्ता उस URL पर कुछ भी अतिरिक्त जोड़ता है, तो कहें,

http://example.com/product?id=34&somethingElse

फिर, आपको इस विधि से "कुछ नहीं" मिलेगा। और यही कारण है कि यह एचटीएमएल पेज में कैनोनिकल यूआरएल मेटा टैग को प्रिंट करने के लिए बिल्कुल अच्छा है।

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