asp.net mvc - Orden de ejecución del filtro de acción
asp.net-mvc asp.net-mvc-3 (3)
El enlace en la respuesta de @HectorCorrea está muerto en este momento, aquí está el contenido recuperado y resumido de la caché actual de Google (en caso de que eso también ocurra):
Los filtros se ejecutan en este orden:
- Filtros de autorizacion
- Filtros de accion
- Filtros de respuesta / resultados
- Filtros de excepción
Dentro de cada filtro, puede especificar la propiedad Orden. (Todos los filtros se derivan de la clase abstracta FilterAttribute, y esta clase tiene una propiedad Order). Esta propiedad asegurará que el filtro se ejecute en una Orden específica.
p.ej:
[AuthorizationFilterA(Order=2)]
[AuthorizationFilterB(Order=1)]
public ActionResult Index()
{
return View();
}
También hay FilterScope
y, de forma predeterminada, el filtro con el alcance más bajo se ejecuta primero cuando el pedido es el mismo (o no especificado):
namespace System.Web.Mvc {
public enum FilterScope {
First = 0,
Global = 10,
Controller = 20,
Action = 30,
Last = 100,
}
}
Si no se especifica una orden, el valor de la orden es -1 (primero, no último).
Los propios controladores pueden ser filtros y se ejecutarán con el orden Int32.MinValue
He creado dos clases que implementan AuthorizeAttribute
.
Uno se usa globalmente, y lo puse en Global.asax.cs:
filters.Add(new FirstAuthorizeAttribute() { Order = 0 });
El otro se llama SecondAuthorizeAttribute
y se usa solo en algunos métodos de acción, y lo uso como atributo en los métodos que deseo.
[HttpGet]
[SecondAuthorize]
public ActionResult LogOut()
{
FormsAuthentication.SignOut();
Session.Clear();
Session.Abandon();
return Redirect(Url.Content("~/"));
}
El problema es que SecondAuthorizeAttribute
siempre se ejecuta antes de FirstAuthorizeAttribute
, y necesito que este se ejecute primero. El orden no está siendo útil, ¿cómo podría hacerlo?
Esta es una posibilidad remota, pero ¿ha intentado usar los valores Global y First para su atributo FirstAuthorizeAttribute?
http://msdn.microsoft.com/en-us/library/system.web.mvc.filterscope(v=vs.98).aspx
http://blog.rajsoftware.com/post/2011/05/14/MVC3-Filter-Ordering.aspx
La orden no está funcionando en el archivo global.asax.cs. Si el requisito es orden, entonces vaya a Controlador o Método de acción y dé. ex:-
[secondAttribute (order = 1)] [firstAttribute (order = 2)]
HomeController: Controlador
o
Índice de ActionResult público ()