public void RemoveModule(int moduleID)
        {
            Static_Module_DAL.Delete(moduleID);

            Static_Cache_Manager.Remove(AccountBLL.CONST_CACHE_KEY_MODULE);
        }
Beispiel #2
0
        /// <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);
        }