Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Return URL a partir do filtro ActionFilterAttribute

Olá a todos! Estou estudando a parte de autenticação usando MVC 5, e segui alguns passos das aulas que assisti, mas fiquei com uma dúvida que não consigo resolver.

Estou validando no OnActionExecuting se existe algum usuário logado na sessão, até aí ok! Quando não tem ninguém logado sou redirecionado para a tela de login, e é aqui que está a dúvida. Como faço para retornar a URL, da página de origem? Assim, depois que eu fizer a autenticação gostaria de ser redirecionado para a página que tentei acessar antes. Estou viajando ou é possível fazer do jeito que estou tentando? rs

 public class AutorizacaoFilterAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            object usuario = filterContext.HttpContext.Session["usuarioLogado"];
            var url = filterContext.HttpContext.Request.RawUrl;


            if (usuario == null)
            {
                filterContext.Result = new RedirectToRouteResult(
                    new RouteValueDictionary(
                        new { Controller = "Login", action = "Index"}));
            }

        }
3 respostas

Olá Maycon,

uma coisa que você poderia fazer é guardar na própria Session a url que o usuário tentou acessar quando entrar na aplicação sem logar. E quando ele conseguir logar você recupera da Session a url que ele tinha digitado e o redireciona para a página que ele originalmente tentou acessar.

solução!

Boa Tarde Maycon tudo certo!

Eu consegui resolver fazendo o seguinte

na classe AutorizacaoFilterAttribute

 public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            object usuario = filterContext.HttpContext.Session["usuarioLogado"];
            //Se nao tiver usuario na sessão redirecionar para index do login
            if (usuario == null)
            {
                //Salvando URL que o usuario tentou acessar
                var Url = HttpContext.Current.Request.Url.ToString();
                filterContext.HttpContext.Session["URL"] = Url; //Salva Url na Sessão

                filterContext.Result = new RedirectToRouteResult(
                    new RouteValueDictionary(
                        new
                        {
                            controller = "Login",
                            action = "Index"
                        }));
            }
        }

E depois no LoginController

        public ActionResult Autentica(string login, string senha)
        {
            UsuariosDAO dao = new UsuariosDAO();
            Usuario usuario = dao.Busca(login, senha);
            if (usuario != null)
            {
                Session["usuarioLogado"] = usuario;

                //Verifica se o usuario tentou acessar outra Url antes
                if(Session["URL"] != null)
                {
                    String Url =(String) Session["URL"]; //Busca a Url da Sessão
                    Response.Redirect(Url); //Redireciona para a Url
                }
                else
                {
                    return RedirectToAction("Index", "Produto");
                }

            }

            return RedirectToAction("Index");

        }

Lucas e Thiago, obrigado pelas dicas, funcionou perfeitamente.

Obrigado!