private void ProcessService(HttpContext context, string path, string[] pathParts, Web.Parameters parameters) { //load service class from URL path string className = CleanReflectionName(pathParts[1].Replace("-", "")).ToLower(); string methodName = pathParts.Length > 2 ? pathParts[2] : options.DefaultServiceMethod; if (pathParts.Length >= 4) { //path also contains extra namespace path(s) for (var x = 2; x < pathParts.Length - 1; x++) { //add extra namespaces className += "." + CleanReflectionName(pathParts[x].Replace("-", "")).ToLower(); } //get method name at end of path methodName = CleanReflectionName(pathParts[^ 1].Replace("-", ""));
private void ProcessController(HttpContext context, string path, string[] pathParts, Web.Parameters parameters) { var html = ""; var newpaths = path.Split('?', 2)[0].Split('/'); var page = routes.FromControllerRoutes(context, parameters, newpaths[0].ToLower()); if (page == null) { //page is not part of any known routes, try getting page class manually var className = (newpaths[0] == "" ? options.DefaultController : newpaths[0].Replace("-", " ")).Replace(" ", "").ToLower(); //get namespace from className var classNamespace = ""; if (!controllerNamespaces.ContainsKey(className)) { //find namespace from compiled list of service namespaces classNamespace = controllers.Keys.FirstOrDefault(a => a.Contains(className)); if (classNamespace != "") { controllerNamespaces.Add(className, classNamespace); } else { //could not find controller page = new Web.Controller() { Context = context, Parameters = parameters, Path = path, PathParts = pathParts }; page.Init(); html = page.Error404(); return; } } else { classNamespace = controllerNamespaces[className]; } //found controller page = (Web.IController)Activator.CreateInstance(controllers[classNamespace]); } if (page != null) { //render page page.Context = context; page.Parameters = parameters; page.Path = path; page.PathParts = pathParts; page.Init(); html = page.Render(); } else { //show 404 error page = new Web.Controller() { Context = context, Parameters = parameters, Path = path, PathParts = pathParts }; page.Init(); html = page.Error404(); } //unload Datasilk Core page.Dispose(); page = null; //send response back to client if (context.Response.ContentType == null || context.Response.ContentType == "") { context.Response.ContentType = "text/html"; } if (context.Response.HasStarted == false) { context.Response.WriteAsync(html); } }