// parses URL string assuming the format /<wsPrefix>/<module>/<function>/<parameter1>/<parameter2>/... private ParsedUrl ParseUrl(string rawUrl) { ParsedUrl parsedUrl = new ParsedUrl(); // check that the string does indeed start with wsPrefix if (!rawUrl.StartsWith("/" + Configuration.wsPrefix + "/")) { parsedUrl.IsWebServiceRequest = false; } else { parsedUrl.IsWebServiceRequest = true; string[] parsedUrlTemp = rawUrl.Split('/'); if (parsedUrlTemp.Count() < 4) { return(null); } parsedUrl.module = parsedUrlTemp[2]; parsedUrl.function = parsedUrlTemp[3]; parsedUrl.parameters = parsedUrlTemp.Where((val, idx) => idx > 3).ToArray(); // restore spaces as they should be for (int i = 0; i < parsedUrl.parameters.Count(); i++) { parsedUrl.parameters[i] = parsedUrl.parameters[i].Replace("%20", " "); parsedUrl.parameters[i] = parsedUrl.parameters[i].Replace("%5C", "\\"); } } return(parsedUrl); }
public string ProcessDynamic(ParsedUrl parsedUrl, string postData) { _logger.Debug("Module: " + parsedUrl.module); _logger.Debug("Function: " + parsedUrl.function); foreach (string parameter in parsedUrl.parameters) { _logger.Debug("Parameter: " + parameter); } if (!Manager.IsRepositoryAccessible) { ReturnError(String.Format("Statistics repository [{0}].[{1}] is not accessible", Configuration.reposInstance, Configuration.reposDatabase ) ); } // find class name corresponding to requested module if (!Configuration.moduleClassMapping.ContainsKey(parsedUrl.module)) { return(ReturnError("Module " + parsedUrl.module + " cannot be found")); } string requestProcessorClassName = Configuration.moduleClassMapping[parsedUrl.module]; Type requestProcessorType = Type.GetType(requestProcessorClassName); if (requestProcessorType == null) { return(ReturnError("Type for class " + requestProcessorClassName + " cannot be found")); } // create an instance of the class that will process the request object requestProcessor = Activator.CreateInstance( requestProcessorType, new object[] { _cfg }); // call ProcessRequest method of the class WebServiceResult requestProcessorResponse = (WebServiceResult)requestProcessorType.GetMethod("ProcessRequest").Invoke( requestProcessor, new object[] { parsedUrl.function, parsedUrl.parameters, postData }); if (requestProcessorResponse.Success) { return(ReturnSuccess(requestProcessorResponse.Message)); } return(ReturnError(requestProcessorResponse.Message)); } // end of ProcessDynamic method
public string ProcessDynamic(ParsedUrl parsedUrl, string postData) { _logger.Debug("Module: " + parsedUrl.module); _logger.Debug("Function: " + parsedUrl.function); foreach (string parameter in parsedUrl.parameters) _logger.Debug("Parameter: " + parameter); if (!Manager.IsRepositoryAccessible) { ReturnError(String.Format("Statistics repository [{0}].[{1}] is not accessible", Configuration.reposInstance, Configuration.reposDatabase ) ); } // find class name corresponding to requested module if (!Configuration.moduleClassMapping.ContainsKey(parsedUrl.module)) { return ReturnError("Module " + parsedUrl.module + " cannot be found"); } string requestProcessorClassName = Configuration.moduleClassMapping[parsedUrl.module]; Type requestProcessorType = Type.GetType(requestProcessorClassName); if (requestProcessorType == null) { return ReturnError("Type for class " + requestProcessorClassName + " cannot be found"); } // create an instance of the class that will process the request object requestProcessor = Activator.CreateInstance( requestProcessorType, new object[] { _cfg }); // call ProcessRequest method of the class WebServiceResult requestProcessorResponse = (WebServiceResult)requestProcessorType.GetMethod("ProcessRequest").Invoke( requestProcessor, new object[] { parsedUrl.function, parsedUrl.parameters, postData }); if (requestProcessorResponse.Success) return ReturnSuccess(requestProcessorResponse.Message); return ReturnError(requestProcessorResponse.Message); }
// parses URL string assuming the format /<wsPrefix>/<module>/<function>/<parameter1>/<parameter2>/... private ParsedUrl ParseUrl(string rawUrl) { ParsedUrl parsedUrl = new ParsedUrl(); // check that the string does indeed start with wsPrefix if (!rawUrl.StartsWith("/" + Configuration.wsPrefix + "/")) parsedUrl.IsWebServiceRequest = false; else { parsedUrl.IsWebServiceRequest = true; string[] parsedUrlTemp = rawUrl.Split('/'); if (parsedUrlTemp.Count() < 4) return null; parsedUrl.module = parsedUrlTemp[2]; parsedUrl.function = parsedUrlTemp[3]; parsedUrl.parameters = parsedUrlTemp.Where((val, idx) => idx > 3).ToArray(); // restore spaces as they should be for (int i = 0; i < parsedUrl.parameters.Count(); i++) { parsedUrl.parameters[i] = parsedUrl.parameters[i].Replace("%20", " "); parsedUrl.parameters[i] = parsedUrl.parameters[i].Replace("%5C", "\\"); } } return parsedUrl; }