2008-08-27 10 views
27

का उपयोग कर रीडायरेक्ट मेरे पास एक तरीका है जहां मैं उपयोगकर्ता को अपने वेब एप्लिकेशन की रूट पर स्थित लॉगिन पेज पर रीडायरेक्ट करना चाहता हूं।प्रतिक्रिया। ~ पथ

मैं निम्नलिखित कोड का उपयोग कर रहा:

Response.Redirect("~/Login.aspx?ReturnPath=" + Request.Url.ToString()); 

यह हालांकि काम नहीं करता। मेरी धारणा यह थी कि एएसपी.नेट स्वचालित रूप से सही पथ में यूआरएल को हल करेगा। आम तौर पर, मैं केवल

Response.Redirect("../Login.aspx?ReturnPath=" + Request.Url.ToString()); 

पर यह कोड एक मास्टर पेज पर है, और इसे किसी भी फ़ोल्डर स्तर से निष्पादित किया जा सकता है। मैं इस मुद्दे के आसपास कैसे हो सकता हूं?

उत्तर

64

का उपयोग कर के बारे में क्या मुझे लगता है कि आप "~ /" ड्रॉप और बस के साथ "/" इसे बदलना जरूरत है, मेरा मानना ​​है कि/है जड़

रोकें ठीक वहीं! :-) जब तक कि आप अपने वेब ऐप को हार्डकोड नहीं करना चाहते हैं ताकि इसे केवल किसी वेब साइट की रूट पर इंस्टॉल किया जा सके।

"~ /" उपयोग करने के लिए सही बात है, लेकिन कारण यह है कि अपने मूल कोड अपेक्षित ढंग से काम नहीं किया है कि ResolveUrl (जो Redirect द्वारा आंतरिक रूप से प्रयोग किया जाता है) पहले अगर बाहर काम करने की कोशिश करता है जिस मार्ग को आप पास कर रहे हैं वह एक पूर्ण यूआरएल है (उदाहरण के लिए "** http://server/ ** foo/bar.htm" "foo/bar.htm" के विपरीत) - लेकिन दुर्भाग्यवश यह केवल एक कोलन चरित्र ':' की तलाश करके करता है यूआरएल में आप इसे देते हैं। लेकिन इस मामले में यह ReturnPath क्वेरी स्ट्रिंग मान में दिए गए यूआरएल में एक कोलन पाता है, जो इसे मूर्ख बनाता है - इसलिए आपका '~ /' हल नहीं होता है।

यह तय करना है कि आपको ReturnPath मान URL-एन्कोडिंग होना चाहिए जो किसी अन्य विशेष वर्णों के साथ समस्याग्रस्त ':' से बच निकले।

Response.Redirect("~/Login.aspx?ReturnPath=" + Server.UrlEncode(Request.Url.ToString())); 

साथ ही, मैं सुझाव है कि आप (या किसी को भी) Uri.ToString का उपयोग कभी नहीं - एक जरूरी सही (यह बातें unescapes) नहीं - क्योंकि यह एक मानव पठनीय है, और अधिक 'दोस्ताना' URL के संस्करण देता है। इसके बजाय Uri.AbsoluteUri का उपयोग करें - जैसे:

Response.Redirect("~/Login.aspx?ReturnPath=" + Server.UrlEncode(Request.Url.AbsoluteUri)); 
-3

Response.Redirect(String.Format("http://{0}/Login.aspx?ReturnPath={1}", Request.ServerVariables["SERVER_NAME"], Request.Url.ToString())); 
+1

सर्वर नाम का उपयोग समस्याग्रस्त है क्योंकि यह संभवतः साइट एक कस्टम DNS का उपयोग कर सकती है। "Http" के रूप में हार्डकोड किए गए प्रोटोकॉल को https का उपयोग करने वाली साइटों के लिए भी समस्याएं उत्पन्न होंगी। –

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