2012-02-01 13 views
40

के साथ यूआरएल से पूरा यूआरएल प्राप्त करना मैं "http:"tilde (~) संकेत

से शुरू होने वाले पूर्ण सटीक यूआरएल में पार्स करने के लिए टिल्ड साइन ('~') से शुरू करने वाला एक सामान्य एएसपीनेट यूआरएल प्राप्त करने की कोशिश कर रहा हूं।

मैं इस स्ट्रिंग "~/PageB.aspx"

है और मैं यह बन बनाना चाहते "http://myServer.com/PageB.aspx"

मुझे पता है यूआरएल को पार्स और सर्वर और आवेदन और इस तरह के अलग अलग रास्तों पाने के लिए कई तरीके । मैंने कई कोशिश की है लेकिन परिणाम प्राप्त नहीं किया है।

उत्तर

16

आप एक पृष्ठ हैंडलर में हैं, तो आप हमेशा ResolveUrl विधि इस्तेमाल कर सकते हैं एक सर्वर विशिष्ट पथ के सापेक्ष पथ परिवर्तित करने के लिए। लेकिन अगर आप "http : //www.yourserver.se" भाग चाहते हैं, तो आपको इसके लिए Request.Url.Scheme और Request.Url.Authority प्रीपेड करना होगा।

66

आजमाएँ

System.Web.VirtualPathUtility.ToAbsolute("yourRelativePath"); 

वहाँ विभिन्न तरीकों कि ASP.NET है कि हम सर्वर साइड पर एक संसाधन है और यह ग्राहक पक्ष पर उपलब्ध करने के लिए संबंधित पथ को हल करने का उपयोग कर सकते में उपलब्ध हैं। मैं 4 तरीके के बारे में पता -

1) Request.ApplicationPath 
2) System.Web.VirtualPathUtility 
3) Page.ResolveUrl 
4) Page.ResolveClientUrl 

अच्छा लेख: Different approaches for resolving URLs in ASP.NET

+0

ध्यान दें कि http://refactoringaspnet.blogspot.com/2009/09/different-approaches-for-resolving-urls.html आलेख _claims_ "URL में क्वेरी स्ट्रिंग पैरामीटर होने पर वर्चुअलपाथ उपयोगिता एक त्रुटि फेंक देगी", लेकिन मुझे लगता है कि यह _does_ सही तरीके से भी काम करता है एक प्रश्न स्ट्रिंग के साथ। – JonBrave

8
string.Format("http://{0}{1}", Request.Url.Host, Page.ResolveUrl(relativeUrl)); 
+0

अतिरिक्त जानकारी: यदि आपको पोर्ट नंबर की आवश्यकता है, तो इसका उपयोग करें। स्ट्रिंग। फोर्मेट ("http: // {0} {1}", Request.Url.Authority, पेज। रीसोल्व यूआरएल (सापेक्ष यूआरएल)) – user3035005

+0

यह उपयोगी था, हालांकि, मैंने रेजर में "Href()" का उपयोग किया Page.ResolveUrl() क्योंकि यह एक शून्य संदर्भ अपवाद फेंकता है। – neoscribe

4

यह विधि मेरे लिए सबसे अच्छी लगती है। कोई स्ट्रिंग परिवर्तन, यह इनपुट के रूप में दोनों रिश्तेदार या संपूर्ण URL बर्दाश्त कर सकते हैं, और यह ठीक उसी योजना, अधिकार, बंदरगाह, और रूट पथ का उपयोग करता है जो कुछ भी रूप में वर्तमान अनुरोध उपयोग कर रहा है:

private Uri GetAbsoluteUri(string redirectUrl) 
{ 
    var redirectUri = new Uri(redirectUrl, UriKind.RelativeOrAbsolute); 

    if (!redirectUri.IsAbsoluteUri) 
    { 
     redirectUri = new Uri(new Uri(Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath), redirectUri); 
    } 

    return redirectUri; 
} 
+0

यदि आप उपरोक्त जानकारी को इस के साथ मिश्रित करते हैं, 'System.Web.VirtualPathUtility.ToAbsolute ("yourRelativePath"); '~ /' पथ को हल करने के लिए, उसके बाद स्ट्रिंग परिणाम पर इस विधि का उपयोग करें। यह काम करता हैं। (मानते हुए बंदरगाह की जानकारी की आवश्यकता नहीं है) इनके संयोजन ने मेरे लिए काम किया। – DiamondDrake

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