protected virtual void LoadCommandEndpoint(Type endpointtype) { WebApiControllerWithTokens controler = (WebApiControllerWithTokens)Activator.CreateInstance(endpointtype, args: new object[] { this, Tokens }); controler.disableIPlockout(); commandEndpoints.Add(endpointtype.Name, controler); foreach (MethodInfo M in endpointtype.GetMethods()) { bool isCallable = false; foreach (CustomAttributeData At in M.CustomAttributes) { if (At.AttributeType.Name == "RouteAttribute") { isCallable = true; break; } } if (isCallable == true) { if (endpointcommandmap.ContainsKey(M.Name) == true) { Warn("Namespace: " + endpointtype.Name + " / Command: " + M.Name + " already found in " + endpointcommandmap[M.Name]); continue; } if (commandnameLowerToReal.ContainsKey(M.Name.ToLowerInvariant()) == true) { Warn("Namespace: " + endpointtype.Name + " / Command: " + M.Name + " already found in " + endpointcommandmap[M.Name]); continue; } endpointcommandmap.Add(M.Name, endpointtype.Name); commandnameLowerToReal.Add(M.Name.ToLowerInvariant(), M.Name); } } }
protected KeyValuePair <bool, string> callAPIcommand(string command, string[] args) { command = commandnameLowerToReal[command.ToLowerInvariant()]; try { string ott = Tokens.OneTimeToken(); WebApiControllerWithTokens Endpoint = commandEndpoints[endpointcommandmap[command]]; MethodInfo theMethod = Endpoint.GetType().GetMethod(command); if (theMethod != null) { List <string> argsList = args.ToList(); argsList.Add(ott); string reply = "Inconnect number of args expected: " + theMethod.GetParameters().Count().ToString() + " but got: " + argsList.Count.ToString(); bool status = false; if (argsList.Count == theMethod.GetParameters().Count()) { status = true; try { if (Endpoint == null) { return(new KeyValuePair <bool, string>(false, "Endpoint is null")); } if (argsList.Count == 0) { return(new KeyValuePair <bool, string>(false, "Zero args at final check require at min 1")); } object[] argsWorker = argsList.ToArray <object>(); object processed = theMethod.Invoke(Endpoint, argsWorker); reply = "Error"; if (processed != null) { reply = JsonConvert.SerializeObject(processed); } return(new KeyValuePair <bool, string>(status, reply)); } catch (Exception e) { return(new KeyValuePair <bool, string>(false, e.Message)); } } return(new KeyValuePair <bool, string>(status, reply)); } else { return(new KeyValuePair <bool, string>(false, "theMethod is null")); } } catch (Exception e) { return(new KeyValuePair <bool, string>(false, e.Message)); } }