public void RemoveModule(int moduleID) { Static_Module_DAL.Delete(moduleID); Static_Cache_Manager.Remove(AccountBLL.CONST_CACHE_KEY_MODULE); }
/// <summary> /// 根据URL的特征,返回相应的模块对象 /// </summary> /// <param name="rawUrl"></param> /// <returns></returns> public ModuleInfo GetModule(Uri rawUrl) { // 取出最后的“\”或“/”符号的位置 int lastSpetorIndex1 = rawUrl.AbsolutePath.LastIndexOf(@"/"); int lastSpetorIndex2 = rawUrl.AbsolutePath.LastIndexOf(@"\"); int lastSpetorIndex = (lastSpetorIndex1 > lastSpetorIndex2) ? lastSpetorIndex1 : lastSpetorIndex2; // 根据文件名,获取相关的模块对象数组 string urlFileName = rawUrl.AbsolutePath.Substring(lastSpetorIndex + 1); IList <ModuleInfo> modules = Static_Module_DAL.SelectList(null, null, urlFileName, null, null, null); if (modules.Count == 0) { return(null); } //if (modules.Count == 1) // return modules[0]; // 检查当前模块的参数 // 如果模块对象所要求的参数键与值,均包含在访问的URL中,则该次请求的对象即为该模块 ModuleInfo ret = null; foreach (ModuleInfo m in modules) { // 过滤掉文件名不相等的模块(以防止某些文件后缀名等于当前文件名的情况出现) int prevCharIndex = m.Url.ToLower().IndexOf(urlFileName.ToLower()) - 1; if (prevCharIndex >= 0 && (m.Url[prevCharIndex] != '\\' && m.Url[prevCharIndex] != '/')) { break; } // 获取当前模块的URL的参数字符串 int moduleURLQueryStartIndex = m.Url.IndexOf('?'); string moduleURLQueryString = (moduleURLQueryStartIndex < 0) ? string.Empty : m.Url.Substring(moduleURLQueryStartIndex + 1).Trim(); // 该模块对象URL没有指定参数,但为了保证获得最佳匹配的模块对象,将继续进行查找 if (moduleURLQueryStartIndex < 0 || string.IsNullOrEmpty(moduleURLQueryString)) { ret = m; continue; } // 检查参数 bool isRequestThisModule = true; string[] moduleURLQueryList = moduleURLQueryString.Split(new[] { "&" }, StringSplitOptions.RemoveEmptyEntries); string urlQueryString = rawUrl.Query.Replace("?", "&") + "&"; foreach (string query in moduleURLQueryList) { int equalIndex = query.IndexOf("="); string queryKey = string.Empty; string queryValue = string.Empty; if (equalIndex >= 0) { queryKey = query.Substring(0, equalIndex); queryValue = query.Substring(equalIndex + 1).Trim(); } // 在原始的请求URL中未找到所要求的参数,表明当次请求的不是该模块 //if (rawUrl.Query.IndexOf("?" + query) < 0 && rawUrl.Query.IndexOf("&" + query) < 0) //if (urlQueryString.IndexOf("&" + query + "&") < 0) if (urlQueryString.IndexOf("&" + queryKey) < 0 || (!string.IsNullOrEmpty(queryValue) && urlQueryString.IndexOf("=" + queryValue + "&") < 0)) { isRequestThisModule = false; break; } } if (isRequestThisModule) { return(m); } } return(ret); }