Esempio n. 1
0
 /// <summary>
 /// 遍历路由表
 /// </summary>
 internal static UrlResult AnalysisUrl(string url)
 {
     foreach (Route route in list)
     {
         UrlResult ur = route.AnalysisUrlOnThis(url);
         if (ur != null)
         {
             return(ur);
         }
     }
     throw new WebException(400, "请检测路径是否正确!");
 }
 /// <summary>
 /// 根据解析后的url提供不同的请求处理类
 /// </summary>
 internal static IManageMessageRequest ExecuteProcess(UrlResult urlResult)
 {
     if (urlResult["filepath"] != null)
     {
         return(new FileRequest());
     }
     else if (urlResult.Controller != null)
     {
         return(new ViewRequest());
     }
     else
     {
         throw new WebException(400, "请检测路径的正确性!");
     }
 }
Esempio n. 3
0
        /// <summary>
        /// 构建路由
        /// </summary>
        private Route(string name, string analysisRule, string defaultUrl)
        {
            _routeName = name;
            //检测路由规则是否符合规范
            //正则表达式:   单个\{[a-z]+\}   整体(\/\{[a-z]+\})+
            Match CorrectRoute      = Regex.Match("/" + analysisRule, @"^(\/\{[a-z]+\})+$", RegexOptions.ECMAScript);
            int   indexOfController = analysisRule.IndexOf("{controller}");
            int   indexOfAction     = analysisRule.IndexOf("{action}");

            if (!CorrectRoute.Success || indexOfAction == -1 || indexOfController == -1)
            {
                throw new Exception("路由规则不符合规范 !");
            }
            AnalysisRule = analysisRule.Split(new char[] { '{', '}', '/' }, StringSplitOptions.RemoveEmptyEntries);
            if (name == "Dafualt")
            {
                list.Insert(0, this);
            }
            else
            {
                list.Add(this);
            }
            DefaultUrl = AnalysisUrl(defaultUrl);
        }