Search code examples
asp.netasp.net-mvc

Calling a Method After a Controller Action in ASP.NET MVC


I used to believe that the following method would be invoked after all controller methods are done at the end:

protected override void EndExecute(IAsyncResult asyncResult)

Now all override methods are called and then, controller methods are invoked. Do you know what override method is invoked after all methods?


Solution

  • You can use action filter it will be called every time any method execute. You can filter it by matching method name.

     public class LogActionFilter : ActionFilterAttribute
     {
          public override void OnActionExecuting(ActionExecutingContext filterContext)
          {
               Log("OnActionExecuting", filterContext.RouteData);       
          }
    
          public override void OnActionExecuted(ActionExecutedContext filterContext)
          {
               Log("OnActionExecuted", filterContext.RouteData);       
          }
    
          public override void OnResultExecuting(ResultExecutingContext filterContext)
          {
               Log("OnResultExecuting", filterContext.RouteData);       
          }
    
          public override void OnResultExecuted(ResultExecutedContext filterContext)
          {
               Log("OnResultExecuted", filterContext.RouteData);       
          }
    
    
          private void Log(string methodName, RouteData routeData)
          {
               var controllerName = routeData.Values["controller"];
               var actionName = routeData.Values["action"];
               var message = String.Format("{0} controller:{1} action:{2}", methodName, controllerName, actionName);
               Debug.WriteLine(message, "Action Filter Log");
          }
    
     }
    

    For more details please visit : https://learn.microsoft.com/en-us/aspnet/mvc/overview/older-versions-1/controllers-and-routing/understanding-action-filters-cs