2009-11-12 16 views
20

यह क्यों है कि एएसपी/एएसपी.NET Response.Redirect एक HTTP-302 स्थिति कोड ("अस्थायी रूप से स्थानांतरित") का उपयोग करता है, भले ही अधिकांश मामलों में HTTP-301 स्थिति कोड ("स्थायी रूप से स्थानांतरित हो") अधिक उपयुक्त होगा?Response.Redirect HTTP स्थिति कोड

उत्तर

39

स्थिति 301 के साथ प्रतिक्रियाओं को कैश करने योग्य माना जाता है, और मुझे नहीं लगता कि आप अधिकांश एएसपी/एएसपी.नेट रीडायरेक्ट के लिए उस व्यवहार को चाहते हैं।

एएसपी.NET 4.0 की आवश्यकता होने पर RedirectPermanent विधि है।

+8

+1 हमें RedirectPermanent के बारे में बताने के लिए +1। – Heinzi

+0

एएसपी.NET 4.0 के साथ आने वाली नई रीडायरेक्ट स्थायी विधि काफी आसान है! दुर्भाग्यवश जिस परियोजना पर मैं काम कर रहा हूं वह 2.0 चल रहा है ... – Vinz

9

Response.Redirect का एक आम उपयोग केस उपयोगकर्ता को एक पोस्टबैक के बाद सर्वर-साइड कोड में दूसरे पृष्ठ पर ले जाना है, उदा।

private void MyButton_Click(object sender, EventArgs e) 
{ 
    if (some condition) { 
     Response.Redirect("ShowProduct.aspx"); 
    } else { 
     Response.Redirect("SorryOutOfStock.aspx"); 
    } 
} 

उन मामलों में, 301 पूरी तरह से गलत होगा। वास्तव में, मुझे लगता है कि उपरोक्त मामला (कुछ यूआई इंटरैक्शन के बाद सशर्त रूप से उपयोगकर्ता को दूसरे पृष्ठ पर ले जाता है) वास्तविक से Response.Redirect का अधिक आम उपयोग है, यह पृष्ठ-स्थानांतरित-टू-अन्य-यूआरएल-हमेशा के लिए परिदृश्य (जहां 301 का रिटर्न कोड उचित होगा)।

2

हेनज़ी के उत्तर के अलावा, वेब पर एकमात्र इकाई जो 301 की अधिक सूचना लेती है, वह खोज इंजन होगी। अधिकतर ब्राउज़र प्रारंभिक यूआरएल के बाद के किसी भी अनुरोध को स्वचालित रूप से रीडायरेक्ट करने के क्रम में 301 ट्रैक और रिकॉर्ड नहीं करेंगे। ब्राउज़र 301 का इलाज करते हैं कि वे 302 का इलाज कैसे करते हैं। इसलिए एएसपी.नेट में उत्पन्न गतिशील सामग्री में 302 काफी उपयुक्त है।

+0

हां, यह उन खोज मकड़ियों हैं जिनके बारे में मैं चिंता कर रहा हूं। – Vinz

19

मैं सफलता के साथ इस काम स्थायी रीडायरेक्ट का उपयोग किया है:

public void RedirectPermanent(string newPath) 
{ 
    HttpContext.Current.Response.Clear(); 
    HttpContext.Current.Response.Status = "301 Moved Permanently"; 
    HttpContext.Current.Response.AddHeader("Location", newPath); 
    HttpContext.Current.Response.End(); 
} 
+1

मैं भी इसका उपयोग कर रहा हूं, लेकिन मैं सोच रहा था कि मुझे यह "कामकाज" क्यों करना है। – Vinz

-1

त्रुटि मिल रहा है response.redirect के कारण नहीं है!

HTTP प्रतिक्रिया स्थिति कोड 301 स्थायी स्थायी पुनर्निर्देशन के लिए स्थायी रूप से उपयोग किया जाता है, जिसका अर्थ है कि वर्तमान लिंक या रिकॉर्ड यूआरएल का उपयोग करते हुए रिकॉर्ड किया गया है, जिसे 301 हटाया गया स्थायी प्रतिक्रिया प्राप्त करने के लिए प्रतिक्रिया के स्थान क्षेत्र में दिए गए नए यूआरएल में अपडेट किया जाना चाहिए ।

+5

अच्छा होगा अगर आपने अपने उत्तरों में से प्रत्येक में http://onfrnz.com/search पर लिंक पोस्ट नहीं किया है, तो यह थोड़ा सा स्पैमी है। धन्यवाद। – Kev

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