2009-04-21 25 views
5

मैं के रूप में यदि कोई उपयोगकर्ता Server.Redirect("B.aspx") का उपयोग कर पृष्ठ B पर पृष्ठ A से नेविगेट करता पिछले page.Such का यूआरएल को खोजने के लिए कोशिश कर रहा हूँ ढूँढना, पेज बी यूआरएल में यह जिक्र प्रदर्शित कर सकते हैं।पिछले पृष्ठ यूआरएल

मैं

Response.Write(Page.PreviousPage.ToString()); 

Response.Write(Request.UrlReferrer.ToString()); 

Response.Write(Context.Request.UrlReferrer.ToString()); 

Response.Write(Request.ServerVariables["HTTP_REFERER"].ToString); 

उपयोग करने की कोशिश की है, लेकिन व्यर्थ में सभी यह मेरे null exception त्रुटि

+0

आप ऐसा करने की कोशिश क्यों कर रहे हैं? हो सकता है कि आपकी समस्या के लिए अन्य समाधान अधिक आसान हो – eKek0

+2

मेरे मामले में मुझे रेफरर को जानने की आवश्यकता थी जब एक एएसपीएक्स पृष्ठ सीडीएन से स्थिर सामग्री लोड कर रहा था। समाधान (मेरे मामले में, आपका माइलेज भिन्न हो सकता है) HttpRequest.Params.Get ("HTTP_REFERER") से मान खींचना था। – jerhewet

+0

अंतिम ToString परान याद आ रही है। इस विशिष्ट उदाहरण के लिए ToString() की आवश्यकता नहीं है। – DeadlyChambers

उत्तर

4

देता है यदि यह इस परिदृश्य (जहां प्रोग्राम के B.aspx रीडायरेक्ट करता है) के लिए ही है तो क्यों पर कुछ नहीं डाल यह कहने के लिए क्वेरीस्ट्रिंग कहां से रीडायरेक्ट आया था। यह बहु ब्राउज़र प्रकार और उपकरणों में काम करने की अधिक संभावना होगी।

इस दृष्टिकोण का एक लाभ यह है कि आप बीएपीएक्स और एक सीधा लिंक (या तो अपने पृष्ठों में से किसी एक लिंक के माध्यम से, या यूआरएल में प्रवेश करने वाले उपयोगकर्ता से) के बीच के अंतर को बताने में सक्षम होंगे। पता आधार) पृष्ठ बीएसपीएक्स के लिए।

रेफरर कुछ ग्राहक HTTP अनुरोध के भाग के रूप प्रदान करता है। इस तरह, आप इस पर भरोसा नहीं कर सकते हैं।

वैसे, इस सवाल से संबंधित है: Request.UrlReferrer null?

अद्यतन अपनी टिप्पणी को देखते हुए यह स्पष्ट है कि एक आसान "अपने सभी फ़ाइलों को संपादित" के अलावा अन्य समाधान है नहीं है। मुझे संदेह है कि वैश्विक खोज/प्रतिस्थापन आपकी सबसे अच्छी शर्त हो सकती है।

कुछ और पृष्ठभूमि: यदि आप फिडलर (या कोई अन्य http डिबगिंग टूल) का उपयोग करते हैं तो आपको यह देखने में सक्षम होना चाहिए कि जब आप रीडायरेक्ट करते हैं तो रेफरर हेडर पॉप्युलेट नहीं किया जा रहा है। उदाहरण के लिए, इस एक रीडायरेक्ट का परिणाम है (यानी एक HTTP 302 प्रतिक्रिया आईई अन्य पृष्ठ पर रीडायरेक्ट के कारण):

GET /webapplication1/WebForm3.aspx HTTP/1.1 
Accept: image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */* 
Accept-Language: en-GB 
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; InfoPath.2; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618; MS-RTC LM 8; Zune 3.0) 
Accept-Encoding: gzip, deflate 
Connection: Keep-Alive 
Host: (removed) 

यहाँ कि StackOverflow पर "प्रश्न" लिंक पर क्लिक करके उत्पन्न होता है HTTP अनुरोध है। कॉम:

GET /questions HTTP/1.1 
    Accept: image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */* 
    Referer: https://stackoverflow.com/questions/772780/finding-previous-page-url 
    Accept-Language: en-GB 
    User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; InfoPath.2; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618; MS-RTC LM 8; Zune 3.0) 
    Accept-Encoding: gzip, deflate 
    Host: stackoverflow.com 
    Connection: Keep-Alive 

आप देख सकते हैं कि बाद में, एक पेज पर एक लिंक के द्वारा उत्पन्न की, रेफ़रलकर्ता हेडर उत्पन्न करता है।

+0

मुझे खेद है, लेकिन मुझे यह धागा आपके उत्तर के लिए धन्यवाद नहीं मिला लेकिन मुझे लगता है कि मुझे 50,000 पेज संपादित करना होगा, इसलिए मैं इसे अपने कस्टम त्रुटि पृष्ठ पर रखने के लिए तर्क ढूंढने की कोशिश कर रहा हूं ताकि मैं आ सकूं पता है कि किस पृष्ठ में टूटा हुआ यूआरएल – Searock

+1

है, मुझे लगता है कि आपको लगता है कि आपको शायद उस पृष्ठ पर रक्षात्मक रूप से कोड करने की आवश्यकता है और यह महसूस होगा कि आपको हमेशा यह जानकारी नहीं मिल जाएगी। माफ़ कीजिये। –

2

तुम भी उपयोग कर सकते हैं Server.Tansfer("B.aspx") के बजाय Response.Redirect("B.aspx")

संपादित करें:, Searock यदि आप अपने मौजूदा कोड को बदलने के लिए नहीं करना चाहते, Request.ServerVariables["HTTP_REFERER"].ToString() उस मामले में ठीक काम करना चाहिए।

2

बस ध्यान दें कि HTTP_REFERER विश्वसनीय नहीं है। आप उस पर भरोसा नहीं कर सकते क्योंकि बहुत से ग्राहक विभिन्न कारणों (पैरानोइड सेटिंग्स, सुरक्षा सॉफ्टवेयर इत्यादि) के लिए नहीं भेजते हैं।

जेएस द्वारा खोले गए कुछ नए विंडोज़ में शायद REFERER एसएसएल नहीं हो सकता है> एसएसएल पृष्ठों में कोई भी संदर्भ नहीं होगा, इसलिए ऐसा कुछ करने के बारे में सावधान रहें।

बेहतर विचार क्वेरी स्ट्रिंग में पिछले पृष्ठ भेजने की जाएगी।

यदि यह ASPX है तुम सिर्फ बफर बाहर लिखने से पहले सभी रूपों या प्रसंस्करण लिंक के लिए एक नया छिपा पैरामीटर जोड़ने की तरह अधिक चतुर तरीके से कर सकता है।

4

आप सत्र में आप वर्तमान पृष्ठ को बचा सकता है और फिर वहाँ से इसे पुनः प्राप्त:

string previousPage = Session["PreviousPage"] as string; 
Session["PreviousPage"] = System.IO.Path.GetFileName(System.Web.HttpContext.Current.Request.FilePath); 

इस तरह previousPage स्ट्रिंग हमेशा पिछले पृष्ठ के फ़ाइल नाम में शामिल होंगे और सत्र चर वर्तमान पृष्ठ में शामिल होंगे, अगले पृष्ठ पर इस्तेमाल करने के लिए तैयार है।

इस तरह आप भी अगर रेफरर एक बाहर कड़ी है क्योंकि तब previousPage स्ट्रिंग शून्य हो जाएगा पता लगा सकते हैं।

+2

यदि उपयोगकर्ता दो विंडो का उपयोग करता है तो यह एक समस्या होगी ताकि सत्र ओवरराइट हो जाए। यदि यह कोई समस्या नहीं है तो यह अच्छा समाधान है। –

1

तुम सिर्फ इस बात की पुष्टि कर सके क्या तरीकों आप वास्तव में यहाँ का उपयोग कर रहे (आदर्श मूल प्रश्न का संपादन करके)?

HttpServerUtility (यानी सर्वर।) में "रीडायरेक्ट" विधि नहीं है, इसमें स्थानांतरण और निष्पादन है।

HttpResponse (यानी प्रतिक्रिया) करता है।

HttpResponse.Redirect ग्राहक के लिए एक 302 प्रतिक्रिया भेज देंगे, स्थान फ़ील्ड के मूल्य के लिए एक नया अनुरोध जारी करने के लिए यह कह रहा। मैं फिर Redirect प्रदर्शन करने वाले पृष्ठ के मान को देखने के लिए Request.UrlReferrer से पूछताछ करने में सक्षम हूं।

यदि आप HttpServerUtility.Transfer या HttpServerUtility.Execute का उपयोग कर रहे हैं तो ये क्रियाएं पूरी तरह से एएसपी.NET के भीतर सर्वर पर होती हैं, और इसलिए "रेफरर" अच्छी तरह से शून्य हो सकता है। क्लाइंट ब्राउज़र यह भी सोचेंगे कि यह अभी भी मूल रूप से अनुरोधित पृष्ठ पर है।

यह भी देखें How to detect if an aspx page was called from Server.Execute

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