伪静态

 public class UrlRewritePathConfig
    {
        private static readonly string CacheKey = "Byecity_Information_RewritePath_CONFIGURATION";

        private static readonly object LOCK_CONFIG = new object();

        private Dictionary<string, ItemData> itemDatas = new Dictionary<string, ItemData>();
        public Dictionary<string, ItemData> ItemDatas
        {
            get
            {
                return itemDatas;
            }
        }

        static UrlRewritePathConfig instance;
        /// <summary>
        /// 配置实例
        /// </summary>
        public static UrlRewritePathConfig Instance
        {
            get
            {
                if (instance != null)
                    return instance;

                instance = ByecityCache.Get(CacheKey) as UrlRewritePathConfig;
                if (instance != null)
                    return instance;

                lock (LOCK_CONFIG)
                {
                    instance = ByecityCache.Get(CacheKey) as UrlRewritePathConfig;
                    if (instance != null)
                        return instance;

                    instance = new UrlRewritePathConfig();

                    //从配置文件中加载XML节点
                    XmlNode nodes = ByecityConfiguration.GetConfig().GetConfigSection("Byecity/RewritePath");

                    //属性
                    XmlAttribute att;
                    XmlAttributeCollection itemAttributes;
                    foreach (XmlNode itemNode in nodes.ChildNodes)
                    {
                        if (itemNode.NodeType == XmlNodeType.Comment)
                            continue;

                        itemAttributes = itemNode.Attributes;
                        ItemData item = new ItemData();
                        att = itemAttributes["Name"];
                        if (att != null)
                            item.Name = att.Value;

                        if (instance.ItemDatas.ContainsKey(item.Name))
                            continue;

                        att = itemAttributes["Page"];
                        if (att != null)
                            item.Page = att.Value;

                        att = itemAttributes["QueryString"];
                        if (att != null)
                            item.QueryString = att.Value;

                        att = itemAttributes["Pattern"];
                        if (att != null)
                            item.Pattern = att.Value;

                        att = itemAttributes["Format"];
                        if (att != null)
                            item.Format = att.Value;

                        instance.ItemDatas.Add(item.Name, item);
                    }

                    //缓存依赖
                    CacheDependency dep = new CacheDependency(
                        new string[] { HttpContext.Current.Server.MapPath(string.Format("~/{0}", ConfigurationManager.AppSettings["ByecityConfig"])) },
                        new string[] { ByecityConfiguration.CacheKey, CacheKey });

                    //将配置插入缓存
                    ByecityCache.Insert(CacheKey, instance, dep, ByecityCache.DayFactor);
                }
                return instance;
            }
        }
    }
    public class ItemData
    {
        private string name;
        /// <summary>
        /// 
        /// </summary>
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }

        private string pattern = "";
        /// <summary>
        /// 
        /// </summary>
        public string Pattern
        {
            get
            {
                return pattern;
            }
            set
            {
                pattern = value;
            }
        }

        private string page = "";
        /// <summary>
        /// 
        /// </summary>
        public string Page
        {
            get
            {
                return page;
            }
            set
            {
                page = value;
            }
        }
        private string queryString = "";
        /// <summary>
        /// 
        /// </summary>
        public string QueryString
        {
            get
            {
                return queryString;
            }
            set
            {
                queryString = value;
            }
        }

        private string format = "";
        /// <summary>
        /// 
        /// </summary>
        public string Format
        {
            get
            {
                return format;
            }
            set
            {
                format = value;
            }
        }
    }

 
 public class UrlRewriteModule : IHttpModule
    {
        #region IHttpModule 成员

        public void Dispose() { }

        public void Init(HttpApplication context)
        {
            context.BeginRequest += new EventHandler(context_BeginRequest);
        }

        static Dictionary<string, Regex> regexs = new Dictionary<string, Regex>();
        static Dictionary<string, string> redirects = new Dictionary<string, string>();
        void context_BeginRequest(object sender, EventArgs e)
        {
            string url = HttpContext.Current.Request.Url.AbsolutePath.ToLower();
            string extention = Path.GetExtension(url);
            string dUrl;

            string replace, newUrl;
            dUrl = HttpUtility.UrlDecode(url);

            if (!extention.Equals(".html", StringComparison.OrdinalIgnoreCase))
                return;

            Regex regex;
            ItemData item;
            foreach (var kvp in UrlRewritePathConfig.Instance.ItemDatas)
            {
                item = kvp.Value;
                if (regexs.ContainsKey(item.Name))
                {
                    regex = regexs[item.Name];
                }
                else
                {
                    regex = new Regex(item.Pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
                    regexs.Add(item.Name, regex);
                }

                if (!regex.IsMatch(dUrl))
                    continue;

                #region 301
                if (kvp.Key.Equals("City_ArticleDetail", StringComparison.OrdinalIgnoreCase) || kvp.Key.Equals("Country_ArticleDetail", StringComparison.OrdinalIgnoreCase))
                {
                    string redirectUrl;
                    if (redirects.ContainsKey(dUrl))
                    {
                        redirectUrl = redirects[dUrl];
                    }
                    else
                    {
                        var match = regex.Match(dUrl);
                        var artId = match.Groups[match.Groups.Count - 3].Value;
                        redirectUrl = UrlUtility.GetFullRewriteUrl("ArticleDetail", artId);
                        redirects.Add(dUrl, redirectUrl);
                    }

                    HttpContext.Current.Response.StatusCode = 301;
                    HttpContext.Current.Response.AppendHeader("Location", redirectUrl);
                    HttpContext.Current.Response.End();
                }
                #endregion

                replace = string.Format("{0}?{1}", item.Page, item.QueryString);

                newUrl = regex.Replace(dUrl, replace);
                HttpContext.Current.RewritePath(newUrl, false);
                return;
            }

            UrlUtility.Return404();
        }

        #endregion
    }


<?xml version="1.0" encoding="utf-8"?>
<Byecity>
  <Core CookieDomain="" CookieTimeOut="30" PersistentTimeOut="43200" cacheFactor="15"/>
  <RewritePath>
    <!--图片首页-->
    <Item Name="Media_Image" Page="/gallery/imagelist.aspx" QueryString="" Pattern="/image.html$" Format="/image.html"></Item>

 </RewritePath>
</Byecity>

电子时钟设计是一个基于单片机的综合性电子项目,涵盖硬件设计、软件设计、模块代码编写以及运行展示等多个环节。以下是该项目的详细分析与知识点总结: 电子时钟设计是一项课程设计任务,目标是开发一个功能完善的电子时钟系统。该系统以单片机为核心控制器,具备时间显示、设置和控制等功能,旨在满足用户的日常使用需求。 硬件设计的核心是系统方案原理图,它明确了系统的整体架构以及各组件之间的连接关系。外设设计方面,键盘输入模块和数码管显示模块是关键部分。键盘输入模块的工作原理包括键盘扫描、按键识别以及状态机控制等环节;数码管显示模块的工作原理则涉及数码管的驱动、显示控制和状态机控制等内容。 软件设计的核心是项目软件系统总架构图,它详细介绍了系统的软件框架,涵盖单片机编程、键盘输入模块流程图与代码、数码管显示模块流程图与代码等方面。顺序图则展示了软件的运行流程,包括系统初始化、键盘输入处理、显示控制和状态机控制等环节。 模块代码是系统各模块功能的具体实现。例如,键盘输入模块的代码实现了键盘扫描、按键识别和状态机控制等功能;数码管显示模块的代码实现了数码管驱动、显示控制和状态机控制等功能。 运行展示是项目的最终成果呈现环节,展示了电子时钟的实际运行效果,包括时间的准确显示、便捷的设置操作以及稳定的控制功能等。 单片机原理:掌握单片机的架构、指令系统和编程方法。 Proteus仿真:熟悉Proteus仿真原理、仿真环境及仿真操作。 C语言编程:理解C语言的语法、数据类型、控制结构、函数和数组等基础知识。 电子时钟设计:了解电子时钟的工作原理、设计方法和实现技术。 硬件设计:掌握硬件设计的基本原理、方法和工具。 软件设计:熟悉软件设计的基本原理、方法和工具。 模块代码实现:掌握模块代码的设计、编程和调试技巧。 电子时钟设计项目融合了硬件与软件设计,通过模块代码实现功能,并通过运行展示呈现最终效果。掌握
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值