¿Cuál es la mejor manera de hacer una redirección en un ActionFilterAttribute
. Tengo un ActionFilterAttribute
llamado IsAuthenticatedAttributeFilter
y que verificó el valor de una variable de sesión. Si la variable es falsa, quiero que la aplicación redirija a la página de inicio de sesión. Preferiría redirigir utilizando el nombre de la ruta, SystemLogin
sin embargo, cualquier método de redireccionamiento en este punto estaría bien.
c#
asp.net-mvc
asp.net-mvc-3
redirect
routes
ryanzec
fuente
fuente
Respuestas:
Establecer filterContext.Result
Con el nombre de la ruta:
También puedes hacer algo como:
Si quieres usar
RedirectToAction
:Se podría hacer público un
RedirectToAction
método en el controlador ( preferiblemente en su controlador de base ) que simplemente llama al protegidoRedirectToAction
deSystem.Web.Mvc.Controller
. Agregar este método permite una llamada pública a ustedRedirectToAction
desde el filtro.Entonces su filtro se vería así:
fuente
protected
para que no tengas acceso desde el filtro.protected
, debe haber alguna explicación razonable. Me siento muy sucio redefiniendo esta accesibilidadRedirectToAction
sin entender por qué se encapsuló en primer lugar.Alternativamente a una redirección, si está llamando a su propio código, puede usar esto:
No es una redirección pura, pero ofrece un resultado similar sin una sobrecarga innecesaria.
fuente
actionContext.Result.ExecuteResult
desde su filtro de acción: MVC lo hará automáticamente después de que se ejecute el filtro de acción (siempreactionContext.Result
que no sea nulo).Estoy usando MVC4, utilicé el siguiente enfoque para redirigir una pantalla html personalizada en caso de incumplimiento de la autorización.
Extender
AuthorizeAttribute
decirCutomAuthorizer
anular elOnAuthorization
yHandleUnauthorizedRequest
Registre el
CustomAuthorizer
en elRegisterGlobalFilters
.al identificar la
unAuthorized
llamada de accesoHandleUnauthorizedRequest
y redirigir a la acción del controlador en cuestión como se muestra a continuación.fuente
Parece que usted desea volver a poner en práctica, o posiblemente extender,
AuthorizeAttribute
. Si es así, debe asegurarse de heredar eso, y noActionFilterAttribute
, para que ASP.NET MVC haga más del trabajo por usted.Además, debe asegurarse de autorizar antes de realizar cualquier trabajo real en el método de acción; de lo contrario, la única diferencia entre iniciar sesión y no será qué página verá cuando termine el trabajo.
Hay una buena pregunta con una respuesta con más detalles aquí sobre SO.
fuente
Pruebe el siguiente fragmento, debe quedar bastante claro:
fuente
Aquí hay una solución que también tiene en cuenta si está utilizando solicitudes Ajax.
fuente
Esto funciona para mí (asp.net core 2.1)
fuente
podría heredar su controlador y luego usarlo dentro de su filtro de acción
dentro de su clase ActionFilterAttribute:
dentro de su controlador base:
Contras. de esto es cambiar todos los controladores para heredar de la clase "MyController"
fuente