Run a method in each request in MVC, C#?

前端 未结 2 476
我在风中等你
我在风中等你 2020-11-30 23:28

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 send         


        
相关标签:
2条回答
  • 2020-12-01 00:15

    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()
    {
        ...
    }
    
    0 讨论(0)
  • 2020-12-01 00:16

    You could use Global.asax Application_AcquireRequestState method which will get called on every request:

    protected void Application_AcquireRequestState(object sender, EventArgs e)
    {
         //...
    }
    
    0 讨论(0)
提交回复
热议问题