12

Mam zainicjowaną metodę w mojej klasie kontrolera podstawowego, która jest wywoływana za każdym razem, gdy wykonywana jest jakakolwiek metoda działania. Przy każdej metodzie działania chcę sprawdzić moją sesję i jeśli jest ona pusta, powinna przekierować na stronę logowania.Metoda przekierowania do działania z kontrolera podstawowego

public class BaseController : Controller 
{ 
    protected IDataRepository _appData = new DataRepository(); 

    protected override void Initialize(RequestContext requestContext) 
    { 
     base.Initialize(requestContext); 

     if (SessionFactory.CurrentAdminUser == null) 
     { 
      RedirectToLogin(); 
     } 
    } 
} 
public ActionResult RedirectToLogin() 
    { 
     return RedirectToAction("AdminLogin", "Admin"); 
    } 

to wywołanie tej metody, ale nie przekierowanie do administratora metody logowania i utrzymuje na wykonanie i metodę połączenia, która jest w przepływie więc błąd przyjdzie.

W skrócie chcę sprawdzić za każdym razem, gdy moja sesja aplikacji uzyska wartość zerową, powinna zmienić stronę logowania i nie jest wygodna, aby sprawdzić wszystkie metody. Proszę zasugerować mi dobry sposób.

Odpowiedz

15

Dzwonisz pod numer RedirectToLogin, który z kolei po prostu zwraca wartość RedirectToActionResult, której nikt nie używa i nie ma wpływu na przepływ procesu.

Spróbuj to zamiast:

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    base.OnActionExecuting(); 

    if (SessionFactory.CurrentAdminUser == null) 
     filterContext.Result = new RedirectResult(Url.Action("AdminLogin", "Admin")); 
} 

Alternatywnie, jeśli nalegać na nadrzędnych Initialize:

protected override void Initialize(RequestContext requestContext) 
{ 
    base.Initialize(requestContext); 

    if (SessionFactory.CurrentAdminUser == null) 
    { 
     requestContext.HttpContext.Response.Clear(); 
     requestContext.HttpContext.Response.Redirect(Url.Action("AdminLogin", "Admin")); 
     requestContext.HttpContext.Response.End(); 
    } 
} 

także sprawdzić filtr [Authorize], może lepiej dostosowane do potrzeb klientów. Zobacz here.

+0

Dziękuję za radę, ale nie mogłem użyć Url.Action. Czy możesz doradzić, który zespół muszę odnieść do tego Url.Action? – Silvia

+1

@Silvia, zakładam, że to 'System.Web.Mvc' – haim770

Powiązane problemy