/// <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); } }