示例#1
0
        public virtual Route Route(MvcCore.Request request)
        {
            Route  currentRoute   = null;
            string chars          = @"a-zA-Z0-9\-_/";
            string controllerName = request.GetParam("controller", chars).ToString();
            string actionName     = request.GetParam("action", chars).ToString();

            if (controllerName.Length > 0 && actionName.Length > 0)
            {
                currentRoute = this.routeByControllerAndActionQueryString(request, controllerName, actionName);
            }
            else
            {
                currentRoute = this.routeByRewriteRoutes(request);
            }
            string[] defaultCtrlAction = MvcCore.Application.GetInstance().GetDefaultControllerAndActionNames();
            Dictionary <string, string> defaultCtrlActionDct = new Dictionary <string, string>()
            {
                { "controller", defaultCtrlAction[0] },
                { "action", defaultCtrlAction[1] }
            };

            foreach (var item in defaultCtrlActionDct)
            {
                if (!request.Params.ContainsKey(item.Key) || (request.Params.ContainsKey(item.Key) && request.Params[item.Key].ToString().Length == 0))
                {
                    request.Params[item.Key] = MvcCore.Tool.GetDashedFromPascalCase(item.Value);
                }
            }
            if (!(currentRoute is Route) && (request.Path == "/" || this.routeToDefaultIfNotMatch))
            {
                currentRoute = MvcCore.Route.GetInstance(
                    name: $"{defaultCtrlAction[0]}:{defaultCtrlAction[1]}",
                    controller: defaultCtrlAction[0],
                    action: defaultCtrlAction[1]
                    );
            }
            if (currentRoute is Route)
            {
                if (currentRoute.Controller.Length == 0)
                {
                    currentRoute.Controller = MvcCore.Tool.GetPascalCaseFromDashed(
                        request.Params["controller"].ToString()
                        );
                }
                if (currentRoute.Action.Length == 0)
                {
                    currentRoute.Action = MvcCore.Tool.GetPascalCaseFromDashed(
                        request.Params["action"].ToString()
                        );
                }
            }
            return(currentRoute);
        }
示例#2
0
 public Controller SetRequest(MvcCore.Request request)
 {
     this.request = request;
     return(this);
 }