2010-04-20 16 views
20

मैं काफी MVC करने के लिए नया है, लेकिन यकीन नहीं वास्तव में कौन-पुनर्निर्देशन ... की जगह मानक WebForms में इस्तेमाल रीडायरेक्ट IE मानक Response.Redirect()एएसपी.नेट एमवीसी: एमवीसी में पृष्ठों/कार्यों पर रीडायरेक्ट करने का सही तरीका क्या है?

उदाहरण के लिए, मैं परिदृश्यों की एक जोड़ी के अन्य पृष्ठों पर रीडायरेक्ट करना होगा हूँ:

1) जब उपयोगकर्ता लॉग आउट करता है (कार्रवाई में फॉर्म साइनआउट) मैं लॉगिन पेज पर रीडायरेक्ट करना चाहता हूं।

2) एक नियंत्रक या आधार नियंत्रक घटना जैसे Initialize में, मैं एक और पेज (AbsoluteRootUrl + नियंत्रक + एक्शन) रीडायरेक्ट करना चाहते हैं

ऐसा लगता है कि कई बार रीडायरेक्ट कुछ मामले हैं जहां त्रुटियों, कुछ करने का कारण बनता में कहा जाता हो इस तथ्य के साथ क्या एक पृष्ठ पहले से ही पुनर्निर्देशित किया जा रहा है? वर्तमान अनुरोध को कैसे रद्द कर सकते हैं और बस रीडायरेक्ट कर सकते हैं?

अद्यतन:

इस सवाल (System.Web.Mvc.Controller Initialize) का जवाब इंगित करता है कि Initialize नहीं किया जाना चाहिए और OnActionExecuting इस्तेमाल किया जाना चाहिए?

Initialize पर कोई टिप्पणी क्यों नहीं दी जानी चाहिए या OnAuthorization बेहतर विकल्प नहीं है?

अधिक जानकारी:

इस ब्लॉग पोस्ट (http://blog.wekeroad.com/blog/aspnet-mvc-securing-your-controller-actions/) इंगित करता है कि OnActionExecuting मैं आधार नियंत्रक कक्षा में है कि घटना को यह जोड़ने लगता है (जैसा कि ऊपर के लिंक में किया है) प्रमाणीकरण के लिए उपयोगी है हर रूप में ठीक है पृष्ठ एमवीसी में एक एक्शन चलाता है इसलिए बहुत अंतर नहीं करना चाहिए और रीडायरेक्ट करने की क्षमता होना आसान होना चाहिए। यह समझ में आता है, लेकिन मुझे यह भी समझ में आता है कि इस घटना से पहले किसी घटना में चीजें की जा सकती हैं और हम सवाल करते हैं कि ये घटनाएं क्या हैं? OnActionExecuting एक जाना दे दिया जाएगा ..

+0

क्या इस आधार नियंत्रक को प्रारंभ घटना है आपका उल्लेख किया:

मार्ग इंजन स्वचालित रूप से अनुरोध करता है कि में आते हैं, यदि आप मतलब आप बस कर एक नियंत्रक पर सूचकांक कार्रवाई से रीडायरेक्ट करना चाहते हैं संभालती है? –

+0

@ माहेश वेलागा: मेरे पास बेस कंट्रोलर है जो प्रारंभिक ईवेंट को ओवरराइड करता है यानी संरक्षित ओवरराइड शून्य प्रारंभ करें (System.Web.Routing.RequestContext requestContext) ... मेरे पास कुछ सुरक्षा जांच हैं और उन चेक के आधार पर उपयोगकर्ताओं को रीडायरेक्ट करने की आवश्यकता है –

+0

क्यों tempdata या viewdata में कुछ मान सेट न करें और जब आप उस मूल्य के आधार पर नियंत्रक कार्रवाई तक पहुंचें जब आप RedirectToAction का उपयोग करके रीडायरेक्ट कर सकते हैं? –

उत्तर

19

1) उपयोगकर्ता लॉग आउट जब (फार्म प्रस्थान करें कार्रवाई में) मैं एक प्रवेश पृष्ठ रीडायरेक्ट करना चाहते हैं।

public ActionResult Logout() { 
    //log out the user 
    return RedirectToAction("Login"); 
} 

2) एक नियंत्रक या आधार नियंत्रक घटना जैसे Initialze में, मैं एक और पेज (AbsoluteRootUrl + नियंत्रक + एक्शन)

आप एक नियंत्रक init से पुनर्निर्देशित करने के लिए क्यों चाहेगा रीडायरेक्ट करना चाहते हैं?

public ActionResult Index() { 
    return RedirectToAction("whateverAction", "whateverController"); 
} 
+0

शायद यह ध्यान रखना चाहें कि पहला आइटम खाता नियंत्रक में है। – GalacticCowboy

+0

मुझे अभी भी लगता है कि फॉर्म प्रमाणीकरण का उपयोग कर।RedirectToLoginPage() को रिडायरेक्ट टॉक्शन ("लॉग इन") के बदले इस्तेमाल किया जाना चाहिए; –

+0

कंट्रोलर प्रारंभिक घटना एक बहु-किरायेदारी के लिए सबडोमेन का पता लगाने, सबडोमेन परिवर्तनों का पता लगाने और इसके आधार पर उपयोगकर्ता प्रमाणीकरण की जांच भी कर रहा है। –

2
RedirectToAction("actionName", "controllerName"); 

यह अन्य भार के रूप में अच्छी तरह है, कृपया जाँच!

इसके अलावा, यदि आप नए हैं और आप T4MVC का उपयोग नहीं कर रहे हैं, तो मैं आपको इसका उपयोग करने की सलाह दूंगा!

यह आप कार्रवाई, नियंत्रकों, विचार आदि (कोई और अधिक जादू तार)

+0

यह नंबर 1 के लिए अच्छा है, लेकिन आपके पास यह संख्या 2 में उपलब्ध नहीं है। –

+0

वास्तव में, में केस नंबर 2, रीडायरेक्ट टॉक्शन को अनदेखा किया जा रहा है? –

4

1) के लिए Intellisence लॉगिन पृष्ठ के प्रवेश पृष्ठ/पर पुन: निर्देशित के लिए, रीडायरेक्ट() पद्धतियों का प्रयोग नहीं करते देता है। FormsAuthentication.RedirectToLoginPage() और FormsAuthentication.RedirectFromLoginPage() का उपयोग करें!

2) आपको नियमित परिदृश्यों में केवल RedirectToAction ("action", "नियंत्रक") का उपयोग करना चाहिए .. आप प्रारंभिक विधि के पक्ष में रीडायरेक्ट करना चाहते हैं? क्यूं कर? मैं नहीं देखता कि आप कभी ऐसा क्यों करना चाहते हैं, और ज्यादातर मामलों में आपको अपने दृष्टिकोण की समीक्षा करनी चाहिए ..आप प्रमाणीकरण के लिए ऐसा करना चाहते हैं, तो यह निश्चित रूप से गलत तरीके से है (बहुत कम संभावना के साथ एक अपवाद दुश्मन) उपयोग अपने नियंत्रक या बजाय विधि :) पर [Authorize] विशेषता

युपीडी: अगर आप कुछ सुरक्षा आरंभ विधि में चेक, और उपयोगकर्ता इस विधि के लिए उपयोग नहीं है, आप चीजों की एक जोड़ी कर सकते हैं: एक)

Response.StatusCode = 403; 
Response.End(); 

यह उपयोगकर्ता प्रवेश पृष्ठ पर भेज देंगे। तुम उसे एक कस्टम स्थान पर भेजना चाहते हैं, तो आप कुछ इस तरह कर सकते हैं (cautios: स्यूडोकोड)

Response.Redirect(Url.Action("action", "controller")); 

पूर्ण यूआरएल निर्दिष्ट करने के लिए कोई ज़रूरत नहीं। यह पर्याप्त होना चाहिए। आप पूरी तरह से पूर्ण यूआरएल पर जोर देते हैं:

Response.Redirect(new Uri(Request.Url, Url.Action("action", "controller")).ToString()); 
+0

एक प्रमाणीकरण जांच है लेकिन एक उपयोगकर्ता को एक बहु-किरायेदारी आवेदन में किरायेदार को फिर से जांचने के साथ और अन्य सुरक्षा जांच की जाती है। यदि कोई उल्लंघन है, तो उपयोगकर्ता को लॉग आउट और कहीं भी रीडायरेक्ट किया जाना चाहिए (यह एक सामान्य लॉगिन, विशिष्ट लॉगिन, होम पेज या अन्य पृष्ठ हो सकता है) –

+0

अच्छा .. मेरा जवाब यह कवर करने लगता है, नहीं? जब तक मुझे कुछ याद नहीं आया, तो किस मामले में मुझे मदद करने में खुशी होगी) –

+0

रीडायरेक्ट्स बिल्कुल प्रारंभ करने से काम नहीं कर रहे हैं, इसलिए पुनर्विचार करना ... प्रश्न के लिए और जानकारी जोड़ें ... –

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