asp.net-mvc asp.net-mvc-3 action-filter authorize-attribute

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?



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 ()