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

não é possivel dar um override OnActionExecuting

Erro seria esse: OnActionExecuting System.Web.Mvc.ActionExecutedContext: no suitable method found to override

Error 3 'CaelumEstoque.Filtros.AutorizacaoFilterAttribute.OnActionExecuting(System.Web.Mvc.ActionExecutedContext)': no suitable method found to override C:\Users\OS\Documents\Visual Studio 2013\Projects\CaelumEstoque\CaelumEstoque\Filtros\AutorizacaoFilterAttribute.cs 15 30 CaelumEstoque codigo de filtro using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; //ActionFilterAttribute namespace CaelumEstoque.Filtros { public class AutorizacaoFilterAttribute : ActionFilterAttribute {

public override void OnActionExecuting(ActionExecutedContext filterContext) { object usuario = filterContext.HttpContext.Session["usuarioLogado"]; if (usuario == null) { filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Login", action = "Index" })); } } } } fim codigo filtro

4 respostas

pessoal pelo que testei aqui agora estou vendo que antes estava assim a assinatura do metodo OnActionExecuting estava errado consertei para o segunda assinatura: public override void OnActionExecuting(ActionExecutedContext filterContext)

public override void OnActionExecuting(ActionExecutingContext filterContext)

mas agora está dando outra mensagem: ERR_TOO_MANY_REDIRECTS deve ser algum conflito na hora de redireicionar, estou analizando mas se alguem tiver alguma ideia é bem vinda.

pelo que percebi minha aplicação fica em loop infinito nesse metodo: OnActionExecuting

//inicio codigo using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; //ActionFilterAttribute namespace CaelumEstoque.Filtros { public class AutorizacaoFilterAttribute : ActionFilterAttribute {

public override void OnActionExecuting(ActionExecutingContext filterContext) { object usuario = filterContext.HttpContext.Session["usuario"]; if (usuario == null) { filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Login", action = "Index" })); } } } } //fim codigo

limpei os coockies e não conseguir fazer rodar:

A página de localhost não está funcionando

Redirecionamento em excesso por localhost Tente limpar os cookies. ERR_TOO_MANY_REDIRECTS

solução!

Pessoal resolvido, eu vi aqui uma mensagem de um estudante Daniel que conseguiu resolver com a solução abaixo:

Daniel Bins (549.7k xp, 404 posts) 3 semanas atrás Eu consegui contornar o problema fazendo o seguinte ajuste na classe do filtro:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace CaelumEstoque.Filtros
{
    public class AutorizacaoFilterAttribute : ActionFilterAttribute
    {
        //Antes de executar o controller
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            object usuarioLogado = filterContext.HttpContext.Session["usuarioLogado"];
            if (usuarioLogado == null)
            {
                if (filterContext.Controller is CaelumEstoque.Controllers.LoginController)
                {
                    //Nao faz nada
                } else { 
                    filterContext.Result = new RedirectToRouteResult(
                                new RouteValueDictionary(
                                   new { action = "Index", controller = "Login" }));
                    }
            }
        }
    }
}