2008-10-26 17 views
5

यह संभवतः उन आसान प्रश्नों में से एक है .. मैं उपयोगकर्ता को सफलतापूर्वक प्रमाणीकृत करने के बाद रीडायरेक्ट करने की कोशिश कर रहा हूं, या उन्हें लॉगिन पृष्ठ पर वापस लौटा रहा हूं। लेकिन सफलता पेज एक अलग मार्ग पर है और मैं पुनर्निर्देशन काम करने के लिए नहीं मिल सकता है ..एएसपी.नेट एमवीसी - मार्ग पर रीडायरेक्ट करने से रीडायरेक्ट लूप

यहाँ Globals.asax में मेरे रास्ते हैं:

routes.MapRoute(_ 
    "Default", _ 
    "{controller}/{action}/{id}", _ 
    New With {.controller = "Login", .action = "Index", .id = ""} _ 
    ) 
routes.MapRoute(_ 
    "Stuff", _ 
    "{controller}/{action}/{id}", _ 
    New With {.controller = "Stuff", .action = "Index", .id = ""} _ 
    ) 

2 नियंत्रकों मिल गया है: LoginController.vb और StuffController.vb

<form method="post" action="/Login/Authenticate"> 

LoginController निम्नलिखित कोड शामिल हैं::

Function Authenticate() As RedirectToRouteResult 
    ' authentication code commented out ;o) 

    Return RedirectToRoute("Stuff") 
End Function 

और StuffController निम्नलिखित शामिल हैं: Views/Login/Index.aspx फ़ाइल कोड के साथ एक सरल रूप में शामिल है

Function Index() 
    ' show stuff.. 

    Return View() ' return /Views/Stuff/Index.aspx 
End Function 

यहाँ मैं क्या 'है मैंने अब तक कोशिश की है:

  • समारोह प्रमाणित()
  • समारोह प्रमाणित() ActionResult के रूप में()
  • समारोह प्रमाणित() RedirectToRouteResult के रूप में()

जो सभी के ब्राउज़र में एक रीडायरेक्ट लूप टाइमआउट के कारण। मैं क्या खो रहा हूँ?!

+0

महान सवाल, मुझे एक ही समस्या थी! – MrBoJangles

उत्तर

7

यह हो सकता है अपना सामान मार्ग डिफ़ॉल्ट के रूप में बिल्कुल वैसा ही रूप है कि, इसलिए जब आप

Return RedirectToRoute("Stuff"); 

फोन जिसके परिणामस्वरूप यूआरएल रूप है: {नियंत्रक}/{कार्रवाई}/{id} उदाहरण के लिए लॉग इन/फिर से प्रमाणीकृत करें, क्योंकि आप लॉग-कंट्रोलर की प्रमाणीकरण कार्रवाई के अंदर हैं।

कोशिश

RedirectToAction("Index", "Stuff"); 

आशा करने में मदद करता है।

+0

आप ' पुनः सही। मैंने 'स्टफ' रूट हटा दिया, और रीडायरेक्ट टॉक्शन ("[व्यू]", "[कंट्रोलर]") का उपयोग किया और यह काम करता है - आपकी मदद के लिए धन्यवाद: ओ) – Andrew

+0

ओह, और मुझे प्रमाणीकरण के रिटर्न प्रकार को बदलने की जरूरत है "ActionResult" के लिए भी फ़ंक्शन: ओ) – Andrew

0

मैं यह देखने में असफल रहा कि आप प्रमाणीकरण कुकी कहां सेट कर रहे हैं या उपयोगकर्ता को किसी भी तरह से प्रमाणीकृत के रूप में चिह्नित कर रहे हैं। क्या वह कोड है जिसे आपने छोड़ा है?

+0

हां, मैं गलत हो सकता हूं लेकिन मुझे नहीं लगता कि मुझे किसी भी प्रमाणीकरण कोड की आवश्यकता होगी क्योंकि मैं वास्तव में यहां करने की कोशिश कर रहा हूं 'कूद' नियंत्रक - लॉग इन कंट्रोलर से स्टफकंट्रोलर – Andrew

+0

पर यदि आप सेट नहीं करते हैं प्रमाणन। कुकी, बशर्ते आपकी क्रिया विधियों को [प्राधिकृत] विशेषता से सजाया गया हो, फिर आपको फिर से अपने लॉगिन यूआरएल पर रीडायरेक्ट कर दिया जाएगा। – liggett78

+0

[अधिकृत] विशेषता के बारे में नोट के लिए धन्यवाद। सच्चाई यह है कि जब मैं यह काम करने की कोशिश कर रहा था तो मैंने प्राधिकरण कोड नहीं लिखा था इसलिए मैंने [प्राधिकरण] के साथ किसी भी एक्शन विधि को सजाया नहीं था - मुझे बस 'प्रवाह' शुरू करने का अधिकार मिल रहा था: ओ) – Andrew

0

कोशिश

routes.MapRoute(_  
"Stuff", _ 
"",_ 
New With {.controller = "Stuff", .action = "Index", .id = ""} _  
) 
8

सही जवाब अच्छा है, लेकिन:

  • क्या आपने कभी स्टाफ/सूचकांक से कुछ और करने के लिए नियंत्रक/कार्रवाई का नाम बदलना चाहते हैं?

- तो आपको न केवल वैश्विक.एक्सएक्स में मूल्यों को बदलने की आवश्यकता होगी, बल्कि उन सभी स्थानों पर भी जहां आपने तकनीक का उपयोग किया था।

मेरे सुझाव:

return RedirectToRoute("Stuff", (RouteTable.Routes["Stuff"] as Route).Defaults); 

अब, इस मामले में, आप नियंत्रक/कार्रवाई जो उसके अनुसार सामग्री/सूचकांक है के नाम से पारित नहीं है। यह आपको आसानी से परिवर्तनों का प्रबंधन करने देगा।

+0

मुझे यह पसंद है - आपके उत्तर के लिए धन्यवाद: ओ) – Andrew

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