Example #1
0
        /// <summary>
        /// Occurs before the action method is invoked.
        /// </summary>
        /// <param name="actionContext">The action context.</param>
        public override void OnActionExecuting(ActionExecutingContext actionContext)
        {
            //Validazione argomenti
            if (actionContext == null)
            {
                throw new ArgumentNullException(nameof(actionContext));
            }

            //Esecuzione delle funzioni base
            base.OnActionExecuting(actionContext);

            //Nome del controller, action e http method (default)
            var controllerName = "<unknown>";
            var actionName     = "<unknown>";
            var httpMethodName = "<unknown>";

            //Cast della action al descrittore del controller
            ControllerActionDescriptor controllerDescriptor = actionContext.ActionDescriptor as ControllerActionDescriptor;

            //Se il cast va a buon fine
            if (controllerDescriptor != null)
            {
                //Imposto il nome del controller e la action
                controllerName = controllerDescriptor.ControllerName;
                actionName     = controllerDescriptor.ActionName;

                //Se non ho constraints, esco
                if (controllerDescriptor.ActionConstraints != null)
                {
                    //Tento il recupero del primo constraint su HTTP
                    var single = controllerDescriptor.ActionConstraints
                                 .FirstOrDefault(c => c.GetType() == typeof(HttpMethodActionConstraint));

                    //Se ho trovato l'elemento
                    if (single != null)
                    {
                        //Cast e recupero il valore
                        var castedConstraint = (HttpMethodActionConstraint)single;
                        httpMethodName = castedConstraint.HttpMethods.SingleOrDefault();
                    }
                }
            }

            //Eseguo la generazione della trace request
            _Request = TraceUtils.GenerateRequest(actionContext.HttpContext.User,
                                                  httpMethodName,
                                                  controllerDescriptor.ControllerName,
                                                  controllerDescriptor.ActionName, actionContext.ActionArguments);

            //Traccio la request (se richiesto)
            if (EnableRequestTrace)
            {
                TraceRequest(_Request);
            }
        }