public CallDescriptor(ControllerDescriptor controller, MethodInfo method) { Controller = controller; Descriptor = MethodDescriptorAttribute.GetDescriptor(method); CacheHeader = CachingAttribute.GetAttribute(method); TokenRequirements = RequiresTokenAttribute.GetAttribute(method); Info = method; Parameters = Info.GetParameters().Select(x => new ParameterDescriptor(x)).ToList(); JsonSerialization = JsonSerializerAttribute.GetAttribute(method); Attributes = Info.GetCustomAttributes().ToDictionary(x => x.GetType(), y => y); }
public static JSBFunction CreateLinkFunction(string baseApiPath, string controller, MethodInfo info, bool useName) { List <ParameterInfo> paras = info.GetParameters().Where(x => !BodyAttribute.HasAttribute(x)).ToList(); ParameterInfo bodyParameter = info.GetParameters().FirstOrDefault(x => BodyAttribute.HasAttribute(x)); string bodyParaName = (bodyParameter != null) ? bodyParameter.Name : ""; BodyAttribute bodyAttr = null; if (bodyParameter != null) { bodyAttr = BodyAttribute.GetAttribute(bodyParameter); } List <string> stringParas = paras.Select(x => x.Name).ToList(); MethodDescriptorAttribute descriptor = MethodDescriptorAttribute.GetDescriptor(info); if (descriptor != null) { //stringParas = new List<string>(); foreach (string para in descriptor.Parameters) { if (!stringParas.Contains(para)) { stringParas.Add(para); } } if (descriptor.HasPostParameter) { bodyParaName = descriptor.PostParameter; } } if (RequiresTokenAttribute.HasAttribute(info)) { stringParas.Add("t"); } JSBuilder code = new JSBuilder(); StringBuilder paraString = new StringBuilder(); for (int i = 0; i < stringParas.Count; i++) { if (i == 0) { paraString.Append("?"); } else { paraString.Append("&"); } paraString.Append(stringParas[i] + "=' + " + stringParas[i] + " + '"); } if (RequiresTokenAttribute.HasAttribute(info)) { code.AddCode("if(!t) t = Sync.Token;"); } string baseUrlPrepend = ((APIBaseUrl != "") ? $"{APIBaseUrl}/" : ""); if (!string.IsNullOrEmpty(bodyParaName)) { if (bodyAttr != null && bodyAttr.BodyType == BodyType.Raw) { if (descriptor != null && descriptor.ResponseType == BodyType.Raw) { code.AddCode($"SyncPostRawRaw('{baseUrlPrepend + controller}/{info.Name}{paraString.ToString()}', {bodyParaName}, callback);"); } else { code.AddCode($"SyncPostRawJson('{baseUrlPrepend + controller}/{info.Name}{paraString.ToString()}', {bodyParaName}, callback);"); } } else { if (descriptor != null && descriptor.ResponseType == BodyType.Raw) { code.AddCode($"SyncPostJsonRaw('{baseUrlPrepend + controller}/{info.Name}{paraString.ToString()}', {"JSON.stringify(" + bodyParaName + ")"}, callback);"); } else { code.AddCode($"SyncPostJson('{baseUrlPrepend + controller}/{info.Name}{paraString.ToString()}', {"JSON.stringify(" + bodyParaName + ")"}, callback);"); } } } else { if (descriptor != null && descriptor.ResponseType == BodyType.Raw) { code.AddCode($"SyncGetRaw('{baseUrlPrepend + controller}/{info.Name}{paraString.ToString()}', callback);"); } else { code.AddCode($"SyncGetJson('{baseUrlPrepend + controller}/{info.Name}{paraString.ToString()}', callback);"); } } if (!string.IsNullOrEmpty(bodyParaName)) { if (stringParas.LastOrDefault() == "t") { stringParas.Insert(stringParas.Count - 1, bodyParaName); } else { stringParas.Add(bodyParaName); } } if (stringParas.LastOrDefault() == "t") { stringParas.Insert(stringParas.Count - 1, "callback"); } else { stringParas.Add("callback"); } JSBFunction func = new JSBFunction(((useName) ? info.Name : null), code, stringParas.ToArray()); return(func); }