Ejemplo n.º 1
0
        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("-", ""));
Ejemplo n.º 2
0
        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);
            }
        }