asp.net mvc interview एक नियंत्रक की कार्रवाई से 301 पुनर्निर्देशन वापस करना



asp.net-mvc (4)

एएसपी.एक्स एमवीसी पर, एक नियंत्रक के पास "301 रीडायरेक्ट" एक बाहरी साइट के लिए "सही" तरीका क्या है?

विभिन्न रीडायरेक्ट टॉ फंक्शन केवल रिश्तेदार लिंक या रूट को लौटाते हैं जो मैंने मैन्युअल रूप से मैप किए हैं, लेकिन " http://example.com पर 301 पुनर्निर्देशन करें" कहने का कोई तरीका नहीं है।

मुझे लगता है कि मैं सिर्फ प्रतिसाद को सेट कर सकता हूं। StatusCode या Response.Redirect का उपयोग करें, लेकिन क्या यह तरीका यह MVC में किया जाना चाहिए? या फिर रीडायरेक्ट करने का एक आधिकारिक "सही रास्ता" है?

अपडेट: इस बीच, मैंने इसके लिए एक ActionResult लिखा था: स्थायी रीडायरेक्ट रेसल्ट

अपडेट 2: ASP.net 4.0 के बाद से, स्थायी पुनर्निर्देशन फ्रेमवर्क का हिस्सा हैं।


Answer #1

मैं विरासत URL का समर्थन करने के लिए रीडायरेक्ट करता हूं।

मेरा नियंत्रक ऐसा कुछ दिखता है ...

Public Class ThingController
    Inherits System.Web.Mvc.Controller

    Function Details(ByVal id As String) As ActionResult
        Dim RedirectId As Guid
        Select Case key
            Case "legacyurlone"
                RedirectId = New Guid("c564c0c1-c365-4b0c-bc33-fd4eadf0551b")
            Case "legacyurltwo"
                RedirectId = New Guid("157fa15b-8d5d-4f04-87cc-434f7ae93dfa")
            Case Else
                RedirectId = Guid.Empty
        End Select
        If Not RedirectId = Guid.Empty Then
            Response.StatusCode = Net.HttpStatusCode.MovedPermanently
            Response.RedirectLocation = Url.RouteUrl("IdOnly", New With {.id = RedirectId})
            Return Nothing
        End If
        Dim ThingId As Guid = New Guid(id)
        Dim db As New ThingEntities
        Dim Model As Thing = ...
        Return View(Model)
    End Function

    ...

End Class

अब मुझे आश्चर्य है कि अगर मैं दो मार्गों और नियंत्रक कार्यों के साथ इसे और अधिक साफ तौर पर संभाल सकता हूं।


Answer #2

चूंकि आप उस यूआरएल पर पुनः निर्देशित करने की बात कर रहे हैं, जिसे आप रूटिंग के बारे में कुछ नहीं जानते (हो सकता है कि एक आंतरिक पेज (क्लासिक एएसपी। नेट) या कुछ बाहरी संसाधन), तो आप जो एकमात्र काम कर सकते हैं वह स्टेटस कोड निर्धारित किया जाता है, और उपयोगकर्ता के ब्राउज़र को अपने रास्ते पर भेजें

एमवीसी में इस चेन में आप उपयोगकर्ता को उनके व्यू के बारे में चिंतित करने के लिए चिंतित हैं, लेकिन यह दृश्य आपके नियंत्रण में नहीं है और यह बिल्कुल भी दृश्य नहीं हो सकता है। तो अंततः आप इस परिस्थिति में सबसे अच्छा कर सकते हैं, और मेरे ज्ञान में कोई भी एमवीसी "नियम" नहीं तोड़ रहा है।

मुझे आशा है कि वह मदद करेंगे।


Answer #3

उपयोग

Response.RedirectPermanent("http://www.google.com"); 

या एक नियंत्रक से एक ActionResult प्रकार लौटने के लिए:

return RedirectPermanent("http://www.google.com"); 

ASP.net 4.0 ढांचे द्वारा प्रदान की गई


Answer #4

क्या यह किसी भी मदद करता है? http://blog.eworldui.net/post/2008/04/ASPNET-MVC---Legacy-Url-Routing.aspx

ऐसा लगता है कि आपको अपनी पसंद के यूआरएल के जरिए आभासी पथ को बदलने की आवश्यकता होगी





asp.net-mvc