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