Подтвердить что ты не робот

Порядок выполнения фильтра действий

Я создал два класса, которые реализуют AuthorizeAttribute.

Один используется глобально, и я устанавливаю его на Global.asax.cs:

filters.Add(new FirstAuthorizeAttribute() { Order = 0 });

Другой называется SecondAuthorizeAttribute и используется только в некоторых методах действий, и я использую его как атрибут в методах, которые я хочу.

    [HttpGet]
    [SecondAuthorize]
    public ActionResult LogOut()
    {
        FormsAuthentication.SignOut();
        Session.Clear();
        Session.Abandon();
        return Redirect(Url.Content("~/"));
    }

Проблема в том, что SecondAuthorizeAttribute всегда выполняется до FirstAuthorizeAttribute, и мне нужно, чтобы это выполнялось первым. Заказ не помогает, как я могу это сделать?

4b9b3361

Ответ 2

Ссылка в ответе @HectorCorrea на данный момент мертва, вот контент, полученный и обобщенный из текущего кэша Google (в случае, если это также идет):

Фильтры выполняются в следующем порядке:

  • Фильтры авторизации
  • Фильтры действий
  • Фильтры ответов/результатов
  • Фильтры исключений

Внутри каждого фильтра вы можете указать свойство Order. (Все фильтры получены из абстрактного класса FilterAttribute, и этот класс имеет свойство Order). Это свойство гарантирует, что фильтр будет работать в определенном порядке.

например:

[AuthorizationFilterA(Order=2)]
[AuthorizationFilterB(Order=1)]
public ActionResult Index()
{          
    return View();
}

Там также FilterScope и по умолчанию фильтр с наименьшей областью запускается сначала, когда заказ одинаков (или не указан):

namespace System.Web.Mvc {
    public enum FilterScope {
        First = 0,
        Global = 10,
        Controller = 20,
        Action = 30,
        Last = 100,
    }
}

Если порядок не указан, значение порядка -1 (сначала, не последнее).

сами контроллеры могут быть фильтрами и выполняться с порядком Int32.MinValue

Ответ 3

Заказ не работает в файле global.asax.cs. Если требование - это порядок, то перейдите к Controller или Action Method и дайте. например: -

[secondAttribute (порядок = 1)] [FirstAttribute (порядок = 2)]

HomeController: контроллер

или

public ActionResult Index()