В WebForm мы могли написать метод в MasterPage.cs, и он запускался в каждом запросе.
например:
MasterPage.cs
--------------
protected void Page_Load(object sender, EventArgs e)
{
CheckCookie();
}
Как мы можем сделать что-то подобное в MVC?
В WebForm мы могли написать метод в MasterPage.cs, и он запускался в каждом запросе.
например:
MasterPage.cs
--------------
protected void Page_Load(object sender, EventArgs e)
{
CheckCookie();
}
Как мы можем сделать что-то подобное в MVC?
В ASP.NET MVC вы можете написать настраиваемый глобальный фильтр действий.
UPDATE:
В соответствии с запросом в разделе комментариев здесь приведен пример того, как выглядит такой фильтр:
public class MyActionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var fooCookie = filterContext.HttpContext.Request.Cookies["foo"];
// TODO: do something with the foo cookie
}
}
Если вы хотите выполнить авторизацию на основе значения cookie, было бы правильнее реализовать интерфейс IAuthorizationFilter:
public class MyActionFilterAttribute : FilterAttribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
{
var fooCookie = filterContext.HttpContext.Request.Cookies["foo"];
if (fooCookie == null || fooCookie.Value != "foo bar")
{
filterContext.Result = new HttpUnauthorizedResult();
}
}
}
Если вы хотите, чтобы этот фильтр действий запускался по каждому запросу для каждого действия контроллера, вы можете зарегистрировать его как глобальный фильтр действий в вашем global.asax в методе RegisterGlobalFilters
:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new MyActionFilterAttribute());
}
И если вам нужно, чтобы это выполнялось только для определенных действий или контроллеров, просто украшайте их этим атрибутом:
[MyActionFilter]
public ActionResult SomeAction()
{
...
}
Вы можете использовать метод Global.asax Application_AcquireRequestState, который будет вызываться по каждому запросу:
protected void Application_AcquireRequestState(object sender, EventArgs e)
{
//...
}