ASP.Net MVC - إعادة التوجيه إلى المسار يعطي حلقة إعادة التوجيه

StackOverflow https://stackoverflow.com/questions/237977

  •  04-07-2019
  •  | 
  •  

سؤال

ربما يكون هذا أحد تلك الأسئلة السهلة..أحاول إعادة توجيه المستخدم بعد أن تمت مصادقته بنجاح، أو إعادته مرة أخرى إلى صفحة تسجيل الدخول.لكن صفحة النجاح تسير في طريق مختلف ولا يمكنني تشغيل إعادة التوجيه..

فيما يلي مساراتي في 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.ال Views/Login/Index.aspx يحتوي الملف على نموذج بسيط بالكود:

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

ال LoginController يحتوي على الكود التالي:

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

    Return RedirectToRoute("Stuff")
End Function

ويحتوي StuffController على ما يلي:

Function Index()
    ' show stuff..

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

إليك ما حاولت حتى الآن:

  • مصادقة الوظيفة ()
  • وظيفة المصادقة () كـ ActionResult ()
  • الدالة Authenticate() كـ RedirectToRouteResult()

كل ذلك يتسبب في انتهاء مهلة حلقة إعادة التوجيه في المتصفح.ماذا ينقصني؟!

هل كانت مفيدة؟

المحلول

هل يمكن أن يكون مسار Stuff الخاص بك له نفس الشكل تمامًا مثل المسار الافتراضي، لذلك عند الاتصال

Return RedirectToRoute("Stuff");

عنوان URL الناتج له النموذج:{controller}/{action}/{id}، على سبيل المثال.قم بتسجيل الدخول/المصادقة مرة أخرى، نظرًا لأنك داخل إجراء المصادقة الخاص بوحدة تحكم تسجيل الدخول.

حاول

RedirectToAction("Index", "Stuff");

امل ان يساعد.

نصائح أخرى

الإجابة الصحيحة جيدة، ولكن:

  • ماذا لو كنت تريد تغيير اسم وحدة التحكم/الإجراء من Staff/Index إلى شيء آخر؟

- إذن ستحتاج إلى تغيير القيم ليس فقط في global.asax، ولكن أيضًا في جميع الأماكن التي استخدمت فيها هذه التقنية.

اقتراحي:

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

الآن، في هذه الحالة، لا يمكنك تمرير أسماء وحدة التحكم/الإجراء وهي Stuff/Index وفقًا لذلك.سيتيح لك ذلك إدارة التغييرات بسهولة.

لا أستطيع رؤية المكان الذي تقوم فيه بتعيين ملف تعريف ارتباط المصادقة أو وضع علامة على المستخدم على أنه تمت مصادقته بأي شكل من الأشكال.هل هذا في الكود الذي حذفته؟

يحاول

routes.MapRoute( _    
"Stuff", _
"",_  
New With {.controller = "Stuff", .action = "Index", .id = ""} _    
)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top