Есть 3 способа реализовать это без нарушения шаблона mvc:
1 - Базовый класс контроллера с заданным поведением в методе OnActionExecuting
/ OnActionExecuted
/ OnResultExecuting
(если это поведение необходимо для всего веб-сайта)
2 - Создать фильтр действий с указанным поведением при OnActionExecuting
/ OnActionExecuted
/ OnResultExecuting
методы:
public class MyCookieSettingFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.HttpContext.Response.Cookies.Add(new HttpCookie(name, value));
}
}
и
назначить атрибут фильтра некоторым контроллерам / действиям (если это поведение не обязательно для всех веб-сайтов), например
[MyCookieSettingFilter]
public class MyHomeController : Controller
{
}
или
public class MyAccountController : Controller
{
[MyCookieSettingFilter]
public ActionResult Login()
{
}
}
3 - Создать фильтр действий с заданным поведением в методах OnActionExecuting
/ OnActionExecuted
/ OnResultExecuting
и зарегистрировать его в global.asax
- он будет работать для всех действий всех контроллеров (если это поведение необходимо для всего сайта)
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new MyCookieSettingFilterAttribute());
}
Я не рекомендую использовать способ Base Controller, потому что он менее расширяемый, чем способ Global Filter. Используйте разные глобальные фильтры для обеспечения разных независимых глобальных поведений.