c# - ActionFilterAttribute OnActionExecutedAsync save logger object to database -


i using global actionfilterattribute plug in logger logic , want save logger object database.

[attributeusage(attributetargets.method, allowmultiple = true)] public sealed class requirehttpheaderattribute : actionfilterattribute {     public applicationdbcontext db = new applicationdbcontext();      public override async task onactionexecutedasync(httpactionexecutedcontext httpactionexecutedcontext, cancellationtoken cancellationtoken)     {         httpactionexecutedcontext executedcontext;         var webservicerequesturi = httpactionexecutedcontext.request.requesturi;         var webservicerequestmethod = httpactionexecutedcontext.request.method;         task<string> content = httpactionexecutedcontext.request.content.readasstringasync();         string webservicerequestbody = content.result;         if (webservicerequestbody == "")             webservicerequestbody = "no-content";         var userid = httpactionexecutedcontext.request.getowincontext().authentication.user.claims.first().value;         // sender address         var myrequest = ((httpcontextwrapper)httpactionexecutedcontext.request.properties["ms_httpcontext"]).request;         var ipaddress = myrequest.servervariables["http_x_forwarded_for"];         if (!string.isnullorempty(ipaddress))         {             string[] iprange = ipaddress.split(',');             int le = iprange.length - 1;             string trueip = iprange[le];         }         else         {             ipaddress = myrequest.servervariables["remote_addr"];         }          var webservicerequestdate = datetime.now;         fmbp_actionlog fmbp_actionlog = new fmbp_actionlog();         fmbp_actionlog.webservicerequeststring = webservicerequesturi.tostring();         fmbp_actionlog.webservicerequestmethod = webservicerequestmethod.tostring();         fmbp_actionlog.webservicerequestbody = webservicerequestbody;         fmbp_actionlog.webservicerequestdate = datetime.now;         fmbp_actionlog.ipaddress = ipaddress;         fmbp_actionlog.userid = userid;         fmbp_actionlog.statuscode = (int)httpactionexecutedcontext.response.statuscode;         db.fmbp_actionlog.add(fmbp_actionlog);         db.savechanges();     } } 

whats best way save fmbp_actionlog database? have been getting number of random errors

"exceptionmessage":"the changes database committed successfully, error occurred while updating object context. objectcontext might in inconsistent state. 

this solved problem. not disposing db context.

    using (var db = new applicationdbcontext())     {         fmbp_actionlog fmbp_actionlog = new fmbp_actionlog();         fmbp_actionlog.webservicerequeststring = webservicerequesturi.tostring();         fmbp_actionlog.webservicerequestmethod = webservicerequestmethod.tostring();         fmbp_actionlog.webservicerequestbody = webservicerequestbody;         fmbp_actionlog.webservicerequestdate = datetime.now;         fmbp_actionlog.ipaddress = ipaddress;         fmbp_actionlog.userid = userid;         fmbp_actionlog.statuscode = (int)httpactionexecutedcontext.response.statuscode;         db.fmbp_actionlog.add(fmbp_actionlog);         // perform data access using context          db.savechanges();     } 

Comments