User Activity Logging in Asp.net MVC Applications

Write the below code with in Global.asax.cs file: 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.IO;  
  4. using System.Linq;  
  5. using System.Net;  
  6. using System.Net.Http;  
  7. using System.Web;  
  8. using System.Web.Http;  
  9. using System.Web.Mvc;  
  10. using System.Web.Routing;  
  11. using WebTask.Models;  
  12. using System.Threading.Tasks;  
  13. namespace WebTask  
  14. {  
  15.     // Note: For instructions on enabling IIS6 or IIS7 classic mode,  
  16.     // visit http://go.microsoft.com/?LinkId=9394801  
  17.     public class MvcApplication : System.Web.HttpApplication  
  18.     {  
  19.         string action = "";  
  20.         string controller = "";  
  21.         string parameter = "";  
  22.         string hostName = "";  
  23.         string ipaddress = "";  
  24.         string requesturl = "";  
  25.         string dataparameter = String.Empty;  
  26.         protected void Application_BeginRequest(object sender, EventArgs args)  
  27.         {  
  28.             Logging();  
  29.         }  
  30.         private async Task Logging()  
  31.         {  
  32.             List<Apilogging> objlogging = new List<Apilogging>();  
  33.             ApiEvent objevent = new ApiEvent();  
  34.             HttpContextBase currentContext = new HttpContextWrapper(HttpContext.Current);  
  35.             UrlHelper urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);  
  36.             RouteData routeData = urlHelper.RouteCollection.GetRouteData(currentContext);  
  37.             action = routeData.Values["action"].ToString();  
  38.             controller = routeData.Values["controller"].ToString();  
  39.             parameter = routeData.Values["id"].ToString();  
  40.             hostName = Dns.GetHostName();  
  41.             ipaddress = Dns.GetHostByName(hostName).AddressList[0].ToString();  
  42.             HttpContext.Current.Request.InputStream.Position = 0;  
  43.             using (StreamReader inputStream = new StreamReader(HttpContext.Current.Request.InputStream))  
  44.             {  
  45.                 dataparameter = inputStream.ReadToEnd();  
  46.             }  
  47.             requesturl = Request.Url.AbsoluteUri;  
  48.             objlogging.Add(new Apilogging { controllername = controller, actionname = action, myip = ipaddress, parameters = parameter, dataparameter = dataparameter, requesturl = requesturl });  
  49.             await objevent.Insertapiaccess(objlogging);  
  50.         }  
  51.         protected void Application_Start()  
  52.         {  
  53.             AreaRegistration.RegisterAllAreas();  
  54.             WebApiConfig.Register(GlobalConfiguration.Configuration);  
  55.             FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);  
  56.             RouteConfig.RegisterRoutes(RouteTable.Routes);  
  57.         }  
  58.     }  
  59. }  
ApiLogging and ApiEvent class Details:
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5. using System.Data.Entity;  
  6. using WebTask.Models;  
  7. using System.Net.Http;  
  8. using System.Threading;  
  9. using System.Threading.Tasks;  
  10. using System.Net;  
  11. using System.IO;  
  12. using System.Web.Mvc;  
  13. using System.Web.Routing;  
  14. using System.Net.Http.Headers;  
  15. namespace WebTask.Models  
  16. {  
  17.     public class ApiEvent : System.Web.HttpApplication  
  18.     {  
  19.         RCHEntities2 objapi = new RCHEntities2();  
  20.         public async Task Insertapiaccess(List<Apilogging> objaccess)  
  21.         {  
  22.             try  
  23.             {  
  24.                 Webapiaccess obj = new Webapiaccess();  
  25.                 foreach (var item in objaccess)  
  26.                 {  
  27.                     obj.ControllerName = item.controllername;  
  28.                     obj.ActionName = item.actionname;  
  29.                     obj.Ipaddress = item.myip;  
  30.                     obj.CreatedDate = DateTime.Now;  
  31.                     obj.UrlParameter = item.parameters;  
  32.                     obj.Dataparameter = item.dataparameter;  
  33.                     obj.RequestUrl = item.requesturl;  
  34.                 }  
  35.                 objapi.Webapiaccesses.Add(obj);  
  36.                 await objapi.SaveChangesAsync();  
  37.             }  
  38.             catch (Exception ex)  
  39.             {  
  40.                 string errormsg = ex.Message.ToString();  
  41.             }  
  42.         }  
  43.     }  
  44.     public class Apilogging  
  45.     {  
  46.         public string controllername { getset; }  
  47.         public string actionname { getset; }  
  48.         public string myip { getset; }  
  49.         public string parameters { getset; }  
  50.         public string dataparameter { getset; }  
  51.         public string requesturl { getset; }  
  52.     }  
  53. }  
 API access is the edmx. It will generate the Web API access class.