Asp.net के पिछले संस्करणों में, हम उपयोग कर सकते हैं
@Request.Url.AbsoluteUri
लेकिन ऐसा लगता है कि यह बदल गया है। हम asp.net कोर 1.0 में कैसे कर सकते हैं?
Asp.net के पिछले संस्करणों में, हम उपयोग कर सकते हैं
@Request.Url.AbsoluteUri
लेकिन ऐसा लगता है कि यह बदल गया है। हम asp.net कोर 1.0 में कैसे कर सकते हैं?
जवाबों:
आपको मेजबान और रास्ता अलग से प्राप्त करना होगा।
@Context.Request.Host@Context.Request.Path
@
दो तारों के बीच क्या है ? क्या आप इसे समझा सकते हैं?
@HttpContext
इसके बजाय उपयोग करना था @Context
। आंशिक विचारों के लिए @Context
काम करता है। क्या मैं एक प्रयोग भूल गया?
Url.Action("Action", null, null, Request.Url.Scheme);
stackoverflow.com/questions/434604/…
आपको स्कीम, होस्ट, पाथ और क्वेरीस्ट्रिंग की आवश्यकता है
@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}")
आप एक्सटेंशन विधि का उपयोग कर सकते हैं Request
:
Request.GetDisplayUrl()
@using Microsoft.AspNetCore.Http.Extensions
तब काम करता है जब आप जोड़ते हैं@Context.Request.GetDisplayUrl()
Suitable only for display. This format should not be used in HTTP headers or other HTTP operations.
आधार पर, मुझे लगता है कि @ tmg का समाधान सबसे अच्छा है (शायद आपके अपने विस्तार विधि में लिपटे हुए हैं)।
यह .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 भी है ।
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 को लौटा देगा।
आप इस विस्तार विधि का उपयोग करने के लिए विचार कर सकते हैं ( 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¶m2=b
Request.GetUri(addQuery: false);
//after >> https://localhost:44304/information/about
//before >> https://localhost:44304/information/about?param1=a¶m2=b
new Uri("https://localhost:44304/information/about?param1=a¶m2=b").GetHostWithNoSlash();
//after >> https://localhost:44304
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
यदि आप अनुरोध से पोर्ट नंबर प्राप्त करना चाहते हैं, तो आपको इसे Request.Host
AspNet Core के लिए प्रॉपर्टी के माध्यम से एक्सेस करना होगा ।
Request.Host
संपत्ति नहीं बस एक स्ट्रिंग के बजाय, एक वस्तु है कि दोनों होस्ट डोमेन रखती है, लेकिन, और पोर्ट संख्या। यदि पोर्ट नंबर को विशेष रूप से URL (यानी ) में लिखा गया है "https://example.com:8080/path/to/resource"
, तो कॉलिंग Request.Host
आपको होस्ट डोमेन और पोर्ट नंबर देगा जैसे "example.com:8080"
:।
आप केवल होस्ट डोमेन के लिए मूल्य चाहते हैं या केवल पोर्ट नंबर के लिए मूल्य तो आप उन गुणों को व्यक्तिगत रूप से (यानी उपयोग कर सकते हैं चाहता हूँ Request.Host.Host
या Request.Host.Port
)।
स्वीकृत उत्तर ने मेरी मदद की, जैसा कि @padigan से इसके लिए टिप्पणी की गई थी, लेकिन यदि आप क्वेरी-स्ट्रिंग मापदंडों को शामिल करना चाहते हैं, जैसा कि मेरे लिए मामला था, तो यह प्रयास करें:
@Context.Request.PathBase@Context.Request.GetEncodedPathAndQuery()
और आपको @using Microsoft.AspNetCore.Http.Extensions
उपलब्ध होने के लिए GetEncodedPathAndQuery () विधि के लिए दृश्य में जोड़ना होगा।
रेजर पेज या पेजमॉडल वर्ग से वर्तमान 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
फिर, आपको इस विधि से "कुछ नहीं" मिलेगा। और यही कारण है कि यह एचटीएमएल पेज में कैनोनिकल यूआरएल मेटा टैग को प्रिंट करने के लिए बिल्कुल अच्छा है।