Example #1
0
        private void SetRequestPropertiesCustomVariables(HttpActionExecutedContext filterContext)
        {
            int position   = 1;
            var customVars = new List <Tuple <string, string> >(5);

            // read any "custom variables" that have been set on the request
            object customVariablesObj;

            filterContext.Request.Properties.TryGetValue("AnalyticsCustomVariables", out customVariablesObj);
            var requestCustomVariablesDict = customVariablesObj as Dictionary <string, string> ?? new Dictionary <string, string>();

            // also will take custom variables from the controller action arguments
            Dictionary <string, object> actionArgumentsDict = filterContext.ActionContext.ActionArguments;

            customVars.AddRange(requestCustomVariablesDict.Keys.Select(key =>
                                                                       new Tuple <string, string>(key, (requestCustomVariablesDict[key] ?? "").ToString(CultureInfo.InvariantCulture))));

            customVars.AddRange(actionArgumentsDict.Keys.Select(key =>
                                                                new Tuple <string, string>(key, (actionArgumentsDict[key] ?? "").ToString())));

            AddPlaceholdersForMissingRequestCustomVariables(requestCustomVariablesDict, actionArgumentsDict, customVars);

            Tracker.ClearCustomVariables();

            foreach (var customVarPair in customVars.OrderBy(tuple => tuple.Item1))
            {
                Tracker.SetCustomVariable(position++, customVarPair.Item1, customVarPair.Item2);

                // only 5 custom variables allowed in Google Analytics
                if (position > 5)
                {
                    break;
                }
            }
        }