Пример #1
0
        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            try
            {
                var queryParams =
                    actionContext.Request.GetQueryNameValuePairs()
                    .Select(a => new QueryStringValueEmbedded {
                    Key = a.Key, Value = a.Value
                })
                    .ToMList();

                var request = new RestLogEntity
                {
                    Url             = actionContext.Request.RequestUri.ToString(),
                    QueryString     = queryParams,
                    User            = UserHolder.Current?.ToLite(),
                    Controller      = actionContext.ControllerContext.Controller.ToString(),
                    Action          = actionContext.ActionDescriptor.ActionName,
                    StartDate       = TimeZoneManager.Now,
                    UserHostAddress = SignumExceptionFilterAttribute.GetClientIp(actionContext.Request),
                    UserHostName    = SignumExceptionFilterAttribute.GetClientName(actionContext.Request),
                    Referrer        = actionContext.Request.Headers.Referrer?.ToString(),
                    RequestBody     = (string)(actionContext.Request.Properties.ContainsKey(SignumAuthenticationFilterAttribute.SavedRequestKey) ?
                                               actionContext.Request.Properties[SignumAuthenticationFilterAttribute.SavedRequestKey] : null)
                };

                actionContext.ControllerContext.RouteData.Values.Add(typeof(RestLogEntity).FullName, request);
            }
            catch (Exception e)
            {
                e.LogException();
            }
        }
Пример #2
0
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            try
            {
                var request = context.HttpContext.Request;
                context.HttpContext.Items[OriginalResponseStreamKey] = context.HttpContext.Response.Body;
                context.HttpContext.Response.Body = new MemoryStream();

                var connection = context.HttpContext.Features.Get <IHttpConnectionFeature>();

                var queryParams = context.HttpContext.Request.Query
                                  .Select(a => new QueryStringValueEmbedded {
                    Key = a.Key, Value = a.Value
                })
                                  .ToMList();

                var restLog = new RestLogEntity
                {
                    AllowReplay     = this.AllowReplay,
                    HttpMethod      = request.Method.ToString(),
                    Url             = request.Path.ToString(),
                    QueryString     = queryParams,
                    User            = UserHolder.Current?.ToLite(),
                    Controller      = context.Controller.GetType().FullName,
                    ControllerName  = context.Controller.GetType().Name,
                    Action          = ((ControllerActionDescriptor)context.ActionDescriptor).ActionName,
                    MachineName     = System.Environment.MachineName,
                    ApplicationName = AppDomain.CurrentDomain.FriendlyName,
                    StartDate       = TimeZoneManager.Now,
                    UserHostAddress = connection.RemoteIpAddress.ToString(),
                    UserHostName    = request.Host.Value,
                    Referrer        = request.Headers["Referrer"].ToString(),
                    RequestBody     = GetRequestBody(context.HttpContext.Request) //(string)(actionContext.Request.Properties.ContainsKey(SignumAuthenticationFilterAttribute.SavedRequestKey) ?
                                                                                  //actionContext.Request.Properties[SignumAuthenticationFilterAttribute.SavedRequestKey] : null)
                };

                context.HttpContext.Items.Add(typeof(RestLogEntity).FullName, restLog);
            }
            catch (Exception e)
            {
                e.LogException();
            }
        }