/// <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, "请检测路径的正确性!"); } }
/// <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); }