In WebForm we could write a method in MasterPage.cs and it ran in each request .
e.g:
MasterPage.cs -------------- protected void Page_Load(object sender, EventArgs e) { CheckCookie(); }
How can we do something like this in MVC ?
Yes, completely possible. And, it can be multiple views, or even a FileResult or other result type.
In ASP.NET MVC you could write a custom global action filter.
UPDATE:
As requested in the comments section here's an example of how such filter might look like:
public class MyActionFilterAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { var fooCookie = filterContext.HttpContext.Request.Cookies["foo"]; // TODO: do something with the foo cookie } }
If you want to perform authorization based on the value of the cookie, it would be more correct to implement the IAuthorizationFilter interface:
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(); } } }
If you want this action filter to run on each request for each controller action you could register it as a global action filter in your global.asax in the RegisterGlobalFilters
method:
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); filters.Add(new MyActionFilterAttribute()); }
And if you need this to execute only for particular actions or controllers simply decorate them with this attribute:
[MyActionFilter] public ActionResult SomeAction() { ... }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With