12

Ho un metodo inizializzato nella mia classe di controller di base che viene chiamato ogni volta che viene eseguito un qualsiasi metodo di azione. Su ogni metodo di azione, voglio controllare la mia sessione e se è nullo dovrebbe reindirizzare alla pagina di accesso.reindirizzare al metodo di azione dal controller di base

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"); 
    } 

E 'chiamata a questo metodo, ma non il reindirizzamento al metodo di login admin e mantiene l'esecuzione su e chiamata di metodo che è in flusso in modo errore verrà.

In breve voglio controllare ogni volta che la mia sessione di applicazione diventa nulla e dovrebbe rediect alla pagina di login e non è conveniente controllare tutti i metodi. Per favore suggeriscimi un buon modo.

risposta

15

Stai chiamando RedirectToLogin che a sua volta restituisce semplicemente un RedirectToActionResult che nessuno sta utilizzando e non influenza il flusso del processo.

Prova a modificare:

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

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

In alternativa, se ti ostini a override 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(); 
    } 
} 

Inoltre, controllare il filtro [Authorize], può meglio soddisfare le vostre esigenze. Vedi here.

+0

Grazie per il vostro consiglio, ma non ho potuto utilizzare Url.Azione. Potete consigliare quale assembly devo fare riferimento a quell'URL.Azione? – Silvia

+1

@Silvia, presumo che sia 'System.Web.Mvc' – haim770