• 自定义实现URL重写 04.18


    1、定义XML规则,配置好URL节点

    ?xml version="1.0" encoding="utf-8" ?>
    <urls>
      <rewrite name="ShowNews" pattern="news-(\d+).html" 
               page="news.aspx" query="id=$1">
        
      </rewrite>
    </urls>

    2、对XML的解析,对其进行封装

      public class MyUrlRewrite
        {
            public string Name { get; set; }
            public string Pattern { get; set; }
            public string Page { get; set; }
            public string Query { get; set; }
        }
    
        public class UrlList
        {
            private static UrlList instance;
            public List<MyUrlRewrite> GetAllUrls
            {
                get;
                set;
            }
             
            private UrlList()
            {
                GetAllUrls = new List<MyUrlRewrite>();
                XmlDocument xmlDoc = new XmlDocument();
                string xmlPath = HttpContext.Current.Request.PhysicalApplicationPath + "/UrlLink.config";
                xmlDoc.Load(xmlPath);
                XmlNode node = xmlDoc.SelectSingleNode("urls");
                foreach (XmlNode item in node.ChildNodes)
                {
                    XmlAttribute name = item.Attributes["name"];
                    XmlAttribute pattern = item.Attributes["pattern"]; 
                    XmlAttribute page = item.Attributes["page"];
                    XmlAttribute query = item.Attributes["query"];
                    if (name == null || pattern == null ||  query == null || pattern == null)
                        continue;
                    MyUrlRewrite model = new MyUrlRewrite();
                    model.Name = name.Value;
                    model.Pattern = pattern.Value;
                    model.Page = page.Value;
                    model.Query = query.Value;
                    GetAllUrls.Add(model);
                }
            }
            public static UrlList GetUrlList()
            {
                if (instance == null)
                {
                    instance = new UrlList();
                }
                return instance;
            }
        }

    3、自定义IHttpModule接口实现URL重写【关于此接口的介绍不做多讲,网上有很多】

     /**
         * 向实现类提供模块初始化和事件处理
         * 
         */ 
        public class MyHttpModule : System.Web.IHttpModule
        {
            #region IHttpModule 成员
    
            //处置由实现 IHttpModule 的模块使用的资源(内存除外)。
            public void Dispose()
            {
                throw new NotImplementedException();
            }
            //初始化模块,并使其为处理请求做好准备。
            public void Init(HttpApplication context)
            {
    
                context.BeginRequest += new EventHandler(context_BeginRequest);
            }
    
            void context_BeginRequest(object sender, EventArgs e)
            {
                HttpContext context = ((HttpApplication)sender).Context;
                string requestPath = context.Request.Path.ToLower();
                foreach (MyUrlRewrite item in UrlList.GetUrlList().GetAllUrls)
                {
                    //不区分大小
                    if (Regex.IsMatch(requestPath, item.Pattern, RegexOptions.IgnoreCase))
                    {
                        string newUrl = Regex.Replace(requestPath, item.Pattern, item.Query);
                        if (newUrl.Length == 0)
                            context.RewritePath(item.Page);
                        else
    
                            context.RewritePath(item.Page + "?" + newUrl.Substring(1));
                    }
                }
            }
    
            #endregion
        }

    4、在web.config进行相应的配置

    <httpModules> 
       <add name="urlrewrite" type="_017_URL重写.MyHttpModule,017_URL重写"/>
    </httpModules>

    5、最终的效果图

     

    小结:

        1、了解asp.net的管道和生命周期很重要

        2、将程序可配置化,避免总是修改demo,采用xml定义规则

        3、最重要的是:湖人进入季后赛了,但科比受伤了。

  • 相关阅读:
    使用jQuery插件时避免重复引入jquery.js文件
    读书笔记《集体智慧编程》Chapter 2 : Make Recommendations
    数据挖掘学习07 《数据挖掘导论》第二章:数据
    推荐2款在线Ascii画图工具
    数据挖掘学习08 实验:使用R评估kmeans聚类的最优K
    数据挖掘学习05 使用R对文本进行hierarchical cluster并验证结果
    Apache alias目录配置
    数据挖掘学习06 《数据挖掘导论》导读
    Unix网络编程 3rd vol1 读书笔记
    关于Xcode
  • 原文地址:https://www.cnblogs.com/zjflove/p/3028159.html
Copyright © 2020-2023  润新知