I f przekierowany kontroler dziedziczy z tego samego baseController
, gdzie nadpisujemy metodę OnActionExecuting
powodującą pętlę rekursywną. Załóżmy, że przekierowujemy go do działania logowania kontrolera konta, a następnie akcja logowania wywoła metodę OnActionExecuting
i przekierowuje do tej samej akcji logowania ponownie ... Dlatego powinniśmy zastosować metodę sprawdzania w metodzie OnActionExecuting
, aby sprawdzić pogodę, czy żądanie pochodzi z ten sam kontroler, jeśli tak, to nie przekierowuj ponownie akcji logowania. tutaj jest kod:
zabezpieczenie przed przesuwaniem.
void OnActionExecuting(ActionExecutingContext filterContext)
{
try
{
some condition ...
}
catch
{
if (filterContext.Controller.GetType() != typeof(AccountController))
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "controller", "Account" }, { "action", "Login" } });
}
}
}
Zamiast "new RedirectResult (url)" można również użyć 'new RedirectToAction (akcja łańcuchowa, kontroler stringów)'. Mogło to zostać dodane do MVC po opublikowaniu odpowiedzi. Twoje rozwiązanie i tak postawi mnie na dobrej drodze. – Manfred
+1000 Dziękujemy! – IamStalker
Nie wykonam tego, co jest w aktualnej akcji? Czy to nie byłaby wada bezpieczeństwa? Powiedzmy, że istnieje akcja, która usuwa użytkownika routowanego przez/Admin/Delete/4. Jeśli Twoim celem jest sprawdzenie, czy jesteś administratorem i przekieruj, jeśli nie. Użytkownik 4 zostanie usunięty, nawet jeśli skończy się przekierowanie, prawda? – Pluc