Saltar al contenido

Redirigir desde el atributo de filtro de acción

Solución:

Establecer filterContext.Result

Con el nombre de la ruta:

filterContext.Result = new RedirectToRouteResult("SystemLogin", routeValues);

También puedes hacer algo como:

filterContext.Result = new ViewResult
{
    ViewName = SharedViews.SessionLost,
    ViewData = filterContext.Controller.ViewData
};

Si quieres usar RedirectToAction:

Podrías hacer un público RedirectToAction método en su controladorpreferiblemente en su controlador base) que simplemente llama al protegido RedirectToAction de System.Web.Mvc.Controller. Agregar este método permite una llamada pública a tu RedirectToAction del filtro.

public new RedirectToRouteResult RedirectToAction(string action, string controller)
{
    return base.RedirectToAction(action, controller);
}

Entonces su filtro se vería así:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    var controller = (SomeControllerBase) filterContext.Controller;
    filterContext.Result = controller.RedirectToAction("index", "home");
}

Alternativamente a una redirección, si está llamando a su propio código, puede usar esto:

actionContext.Result = new RedirectToRouteResult(
    new RouteValueDictionary(new { controller = "Home", action = "Error" })
);

actionContext.Result.ExecuteResult(actionContext.Controller.ControllerContext);

No es una redirección pura, pero da un resultado similar sin una sobrecarga innecesaria.

Estoy usando MVC4, utilicé el siguiente enfoque para redirigir una pantalla html personalizada en caso de incumplimiento de autorización.

Ampliar AuthorizeAttribute decir CutomAuthorizer
anular el OnAuthorization y HandleUnauthorizedRequest

Registre el CustomAuthorizer en el RegisterGlobalFilters.

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{

    filters.Add(new CustomAuthorizer());
}

al identificar el unAuthorized acceso a llamada HandleUnauthorizedRequesty redirigir a la acción del controlador en cuestión como se muestra a continuación.


public class CustomAuthorizer : AuthorizeAttribute
{

    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        bool isAuthorized = IsAuthorized(filterContext); // check authorization
        base.OnAuthorization(filterContext);
        if (!isAuthorized && !filterContext.ActionDescriptor.ActionName.Equals("Unauthorized", StringComparison.InvariantCultureIgnoreCase)
            && !filterContext.ActionDescriptor.ControllerDescriptor.ControllerName.Equals("LogOn", StringComparison.InvariantCultureIgnoreCase))
        {

            HandleUnauthorizedRequest(filterContext);

        }
    }

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        filterContext.Result =
       new RedirectToRouteResult(
           new RouteValueDictionary{{ "controller", "LogOn" },
                                          { "action", "Unauthorized" }

                                         });

    }
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *