private void AddParameterDescriptionsToModel(ActionApiDescriptionModel actionModel, MethodInfo method, ApiDescription apiDescription) { if (!apiDescription.ParameterDescriptions.Any()) { return; } var matchedMethodParamNames = ArrayMatcher.Match( apiDescription.ParameterDescriptions.Select(p => p.Name).ToArray(), method.GetParameters().Select(GetMethodParamName).ToArray() ); for (var i = 0; i < apiDescription.ParameterDescriptions.Count; i++) { var parameterDescription = apiDescription.ParameterDescriptions[i]; var matchedMethodParamName = matchedMethodParamNames.Length > i ? matchedMethodParamNames[i] : parameterDescription.Name; actionModel.AddParameter(new ParameterApiDescriptionModel( parameterDescription.Name, matchedMethodParamName, parameterDescription.Type, parameterDescription.RouteInfo?.IsOptional ?? false, parameterDescription.RouteInfo?.DefaultValue, parameterDescription.RouteInfo?.Constraints?.Select(c => c.GetType().Name).ToArray(), parameterDescription.Source.Id ) ); } }
private void AddAjaxCallParameters(StringBuilder script, ControllerApiDescriptionModel controller, ActionApiDescriptionModel action) { var httpMethod = action.HttpMethod?.ToUpperInvariant() ?? "POST"; script.AppendLine(" url: abp.appPath + '" + ProxyScriptingHelper.GenerateUrlWithParameters(action) + "',"); script.Append(" type: '" + httpMethod + "'"); var headers = ProxyScriptingHelper.GenerateHeaders(action, 8); if (headers != null) { script.AppendLine(","); script.Append(" headers: " + headers); } var body = ProxyScriptingHelper.GenerateBody(action); if (!body.IsNullOrEmpty()) { script.AppendLine(","); script.Append(" data: JSON.stringify(" + body + ")"); } else { var formData = ProxyScriptingHelper.GenerateFormPostData(action, 8); if (!formData.IsNullOrEmpty()) { script.AppendLine(","); script.Append(" data: " + formData); } } script.AppendLine(); }
public static string GenerateUrlWithParameters(ActionApiDescriptionModel action) { //TODO: Can be optimized using StringBuilder? var url = ReplacePathVariables(action.Url, action.Parameters); url = AddQueryStringParameters(url, action.Parameters); return url; }
public ActionApiDescriptionModel AddAction(ActionApiDescriptionModel action) { if (Actions.ContainsKey(action.Name)) { throw new AbpException( $"Can not add more than one action with same name to the same controller. Controller: {Name}, Action: {action.Name}." ); } return Actions[action.Name] = action; }
public ActionApiDescriptionModel AddAction(ActionApiDescriptionModel action) { if (Actions.ContainsKey(action.Name)) { throw new AbpException( $"Can not add more than one action with same name to the same controller. Controller: {Name}, Action: {action.Name}." ); } return(Actions[action.Name] = action); }
private static void AddActionScript(StringBuilder script, ModuleApiDescriptionModel module, ControllerApiDescriptionModel controller, ActionApiDescriptionModel action) { var parameterList = ProxyScriptingJsFuncHelper.GenerateJsFuncParameterList(action, "ajaxParams"); script.AppendLine($" // action '{action.Name.ToCamelCase()}'"); script.AppendLine($" abp.services.{module.Name.ToCamelCase()}.{controller.Name.ToCamelCase()}.{action.Name.ToCamelCase()} = function({parameterList}) {{"); script.AppendLine(" return abp.ajax($.extend(true, {"); AddAjaxCallParameters(script, controller, action); script.AppendLine(" }, ajaxParams));;"); script.AppendLine(" };"); }
public static string GenerateFormPostData(ActionApiDescriptionModel action, int indent = 0) { var parameters = action .Parameters .Where(p => p.BindingSourceId == ParameterBindingSources.Form) .ToArray(); if (!parameters.Any()) { return null; } return ProxyScriptingJsFuncHelper.CreateJsObjectLiteral(parameters, indent); }
public static string GenerateBody(ActionApiDescriptionModel action) { var parameters = action .Parameters .Where(p => p.BindingSourceId == ParameterBindingSources.Body) .ToArray(); if (parameters.Length <= 0) { return null; } if (parameters.Length > 1) { throw new AbpException( $"Only one complex type allowed as argument to a controller action that's binding source is 'Body'. But {action.Name} ({action.Url}) contains more than one!" ); } return ProxyScriptingJsFuncHelper.GetParamNameInJsFunc(parameters[0]); }
public static string GenerateJsFuncParameterList(ActionApiDescriptionModel action, string ajaxParametersName) { var methodParamNames = action.Parameters.Select(p => p.NameOnMethod).Distinct().ToList(); methodParamNames.Add(ajaxParametersName); return methodParamNames.Select(prmName => NormalizeJsVariableName(prmName.ToCamelCase())).JoinAsString(", "); }