public override void Invoke(ControllerExecutionContext executionCtx)
		{
			var result = executionCtx.InvocationResult as ActionResult;

			if (result != null)
			{
				var areaName = executionCtx.ControllerDescriptor.Area;
				var controllerName = executionCtx.ControllerDescriptor.Name;
				var actionName = executionCtx.SelectedAction.Name;

				var resultCtx = new ActionResultContext(areaName, controllerName, actionName, executionCtx.HttpContext);

				result.Execute(resultCtx, executionCtx.ControllerContext, Services);
			}

			Proceed(executionCtx);
		}
		public override void Invoke(ControllerExecutionContext executionCtx)
		{
			var action = executionCtx.RouteData.GetRequiredString("action");

			var selectedActions = 
				executionCtx.ControllerDescriptor.Actions.
					Where(ad => string.Compare(ad.Name, action, StringComparison.OrdinalIgnoreCase) == 0).ToList();

			if (selectedActions.Count > 1)
			{
				//TODO: disambiguation here?
			}
			else
			{
				var selectedAction = selectedActions.FirstOrDefault();
				
				if (selectedAction == null)
					throw new HttpException(404, "'action' not found");

				executionCtx.SelectedAction = selectedAction;
			}

			Proceed(executionCtx);
		}