ActionExecutingContext имеет HttpContext, который будет включать текущий объект User. Вы можете использовать это, чтобы получить пользователя. Вы также можете использовать его для доступа к сеансу, если хотите сохранить информацию в сеансе. Вы также можете поместить его в зашифрованный файл cookie и получить к нему доступ через контекстную форму Request.Cookies. Возможно, вы захотите подумать о последствиях этого для безопасности, хотя я не считаю это более проблематичным, чем файл cookie для аутентификации.
Проверка его по базе данных и поддержание тестируемости на вашем фильтре немного сложнее. Что я сделал, так это предоставил два конструктора для каждого класса фильтра. Один обеспечивает фабрику базы данных, которая создаст мой контекст данных. Я использую это в тестировании и поставляю фабрику фиктивных баз данных, которая создает фиктивные или фальшивые базы данных. Обычный конструктор без параметров вызывает предыдущий конструктор с нулевой фабрикой. Когда это происходит, другой конструктор создает новый экземпляр фабрики по умолчанию.
private IDatabaseFactory Factory { get; set; }
public MyFilter( IDatabaseFactory factory )
{
this.Factory = factory ?? new DefaultDatabaseFactory();
}
public MyFilter() : this(null) { }