private async Task<object> InvokeAction(RestController controller, IDictionary<string, object> environment, IEnumerable<MediaTypeFormatter> formatters)
        {
            var actionDescriptor = new ActionDescriptorGenerator().GenerateActionDescriptor(controller);

            _actionParameterBinder.BindParameters(actionDescriptor, environment, formatters);
            return await InvokeActionAsync(controller, actionDescriptor);
        }
        private async Task<object> InvokeActionAsync(RestController controller, ActionDescriptor descriptor)
        {
            var controllerType = controller.GetType();
            var actionMethod = controllerType.GetMethod(descriptor.ActionName);
            var result = actionMethod.Invoke(controller, descriptor.ActionArguments.Select(a => a.ParamValue).ToArray());
            if (result == null)
                result = (object)DBNull.Value;

            return await Task.FromResult(result);
        }