Если эта проверка должна выполняться при каждом вызове, я бы создал атрибут и украсил им базовый класс контроллера. Не забудьте также украсить ваш новый атрибут AttributeUsage
, чтобы он вызывался на всех наследующих контроллерах.
[AttributeUsage (AttributeTargets.All, Inherited = true)]
public CheckStuffAttribute : ActionFilterAttribute
{
// This is one method you can override to get access
// to everything going on before any actions are executed.
public override void OnActionExecuting (ActionExecutingContext filterContext)
{
// Do your checks, or whatever you need, here
}
}
...
[CheckStuff]
public abstract class ApplicationController : Controller { ... }
Что касается вашего второго вопроса, вы можете создать свойства базового класса, которые используют Session в качестве своего резервного хранилища.
[CheckStuff]
public abstract class ApplicationController : Controller
{
public string DataToKeepAlive
{
get { return (string)Session["MyKey"]; }
set { Session["MyKey"] = value; }
}
}
Если сделать свойства общедоступными, к ним будут доступны ваши пользовательские атрибуты.