• 自定义实现URL重写 04.18


    自定义实现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、最重要的是:湖人进入季后赛了,但科比受伤了。

     
     
  • 相关阅读:
    Eclipse 常用快捷键和使用技巧
    Android Studio 常用快捷键和使用技巧
    Android之省市区三级联动
    Android assets文件夹之位置放置和作用
    Android之SwipeRefreshLayout下拉刷新组件
    Android设计模式之工厂模式
    Android之侧滑菜单DrawerLayout的使用
    Docker技术入门与实战 第二版-学习笔记-8-网络功能network-3-容器访问控制和自定义网桥
    Docker技术入门与实战 第二版-学习笔记-8-网络功能network-2-相应配置
    Docker技术入门与实战 第二版-学习笔记-10-Docker Machine 项目-1-cli
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3028305.html
Copyright © 2020-2023  润新知