public string GetClientMethodCode(MethodInfo method, string url) { var model = new ClientMethodModel(); var parameterInfos = method.GetParameters(); var inputParameters = parameterInfos.Select(p => string.Format("{0}: {1}", p.Name, TypeMapper.GetTypeScriptType(p.ParameterType))) .ToList(); model.Traditional = parameterInfos.Any(p => p.ParameterType.IsArray); var returnType = method.ReturnType; if (returnType.Name != "Void") { var onSucces = "callback: (data: " + TypeMapper.GetTypeScriptType(returnType) + ") => any"; inputParameters.Add(onSucces); model.OnSucces = "callback"; } //hacky var isPost = method.GetCustomAttributes(typeof(HttpPostAttribute), true).Any() || returnType.IsJsonResult() || returnType == typeof(JsonResult); model.AjaxMethod = isPost ? "POST" : ""; var allParameters = string.Join(", ", inputParameters); model.Signature = method.Name + "(" + allParameters + ")"; model.Url = url; var inputJsonTuples = method.GetParameters().Select(p => string.Format("{0}: {0}", p.Name)); model.Data = "{ " + string.Join(", ", inputJsonTuples) + " }"; var template = GetTemplate("ClientMethod"); return(RemoveEmptyLines(Razor.Parse(template, model)));//.Split("\r\n".ToCharArray(),StringSplitOptions.RemoveEmptyEntries); }
public ClientGroupsModel Bind(CodeModelTs codeModel) { var model = new ClientGroupsModel { ModelModuleName = "model", Header = new HeaderModel(), Clients = new List <ClientModel>() }; foreach (var group in codeModel.MethodGroups) { var groupName = group.Key; var methods = group.ToArray(); var client = new ClientModel { Name = $"{groupName.ToPascalCase().Replace("Api", "")}Api", Methods = new List <ClientMethodModel>() }; client.InterfaceName = $"I{client.Name}"; foreach (var method in methods) { IModelType modelType = null; string responseName = null; string requestName = null; if (!TryGetResponseName(method, out modelType, out responseName, out requestName, model.ModelModuleName)) { continue; } var clientMethod = new ClientMethodModel { OperationId = method.SerializedName.ToString(), UrlTemplate = GetUrlTemplate(method), QueryStringTemplate = GetQueryParameterTemplate(method), HttpMethod = method.HttpMethod.ToString().ToLower(), MethodName = method.Name.Value.Replace($"{groupName}_", "").ToCamelCase(), RequestTypeName = requestName, ResponseTypeName = responseName, ParamNamesInPath = method.Parameters.Where(p => p.Location == ParameterLocation.Path) .Select(p => p.Name.Value) .ToList(), ParamNamesInQuery = method.Parameters.Where(p => p.Location == ParameterLocation.Query) .Select(p => p.Name.Value) .ToList(), ParamNamesInBody = method.Parameters.Where(p => p.Location == ParameterLocation.Body) .Select(p => p.Name.Value) .ToList(), ParamNamesInHeader = method.Parameters.Where(p => p.Location == ParameterLocation.Header) .Select(p => p.Name.Value) .ToList() }; clientMethod.ResponsePromiseTypeName = $"Promise<{clientMethod.ResponseTypeName}>"; client.Methods.Add(clientMethod); } model.Clients.Add(client); } return(model); }