Example #1
0
        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);
            }
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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);
        }