public async Task <Entity.APILog> LogResponse(Entity.APILog log) { using (var db = new Data.SMSDataModel()) { db.APILogs.Attach(log); db.Entry(log).State = EntityState.Modified; await db.SaveChangesAsync(); return(log); } }
public async Task <Entity.APILog> LogRequest(Entity.APILog log) { using (var db = new Data.SMSDataModel()) { log.Id = Guid.NewGuid(); db.APILogs.Add(log); await db.SaveChangesAsync(); return(log); } }
protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { //Log request var requestHeaders = request.Headers.ToDictionary(h => h.Key, h => h.Value); string headersToLog = String.Join(";", requestHeaders.Select(h => h.Key + ": " + String.Join(",", h.Value))); string requestBody = await request.Content.ReadAsStringAsync(); var log = new Entity.APILog(); log.GroupKey = Guid.NewGuid(); log.RequestContentBody = requestBody; log.RequestContentType = request.Content.Headers.ContentType != null?request.Content.Headers.ContentType.ToString() : null; log.RequestHeaders = headersToLog; log.RequestIpAddress = GetClientIp(request); log.RequestMethod = request.Method.ToString(); log.RequestTimeStamp = DateTime.UtcNow; log.RequestUri = request.RequestUri.ToString(); log = await LogService.LogRequest(log); //set the APILogGroupKey in the owinContext for the log record GroupKey value for 3rd party calls so we know what external calls were made in this request var owinContext = request.GetOwinContext(); owinContext.Set <Guid>("APILogGroupKey", (Guid)log.GroupKey); request.SetOwinContext(owinContext); //Response comes back var response = await base.SendAsync(request, cancellationToken); //Log response if (response.Content != null) { string responseMessage = await response.Content.ReadAsStringAsync(); var responseHeaders = request.Headers.ToDictionary(h => h.Key, h => h.Value); log.ResponseContentBody = responseMessage; log.ResponseContentType = response.Content.Headers.ContentType.ToString(); log.ResponseHeaders = String.Join("rn", responseHeaders.Select(h => h.Key + ": " + String.Join(",", h.Value))); log.ResponseStatusCode = (int?)response.StatusCode; log.ResponseTimeStamp = DateTime.UtcNow; await LogService.LogResponse(log); } //Return response return(response); }