zoukankan      html  css  js  c++  java
  • Url地址重写,利用HttpHander手工编译页面并按需生成静态HTML文件

    作者:武眉博 

    另:建议阅读一下 dudu 的 blog 中关于 asp.net 页面编译的讨论
    http://www.cnblogs.com/dudu/archive/2006/03/07/345107.html
    http://www.cnblogs.com/dudu/archive/2006/03/07/344351.html

    部分代码

    C#代码
    public void ProcessRequest(HttpContext context)   
            {   
                string rawUrl = context.Request.RawUrl;   
                string requestPath = context.Request.Path;   
                string applicationPath = context.Request.ApplicationPath;   
                Url urlItem = null;   
      
                //上下文中没有定义 ToStaticUrlItem 表示,此请求没有经过 UrlRewrite,直接编译,不生成 html   
                //参考 UrlRewriteModule.cs   
                if (context.Items["ToStaticUrlItem"] == null)   
                {   
                    if (!File.Exists(context.Request.PhysicalPath))   
                    {   
                        throw new HttpException(404, "您访问的页面没有找到。");   
                    }   
      
                    // asp.net 1.1 采用下面方法编译页面   
                    //PageParser.GetCompiledPageInstance(requestPath, context.Request.PhysicalPath, context).ProcessRequest(context);   
                    IHttpHandler hander = BuildManager.CreateInstanceFromVirtualPath(requestPath, typeof(Page)) as IHttpHandler;   
                    hander.ProcessRequest(context);   
      
                    return;   
                }   
      
                string filePath;   
      
                urlItem = (Url)context.Items["ToStaticUrlItem"];   
      
                Regex regex = new Regex(   
                    Globals.ApplicationPath + urlItem.LookFor,   
                    RegexOptions.CultureInvariant | RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.IgnoreCase);   
      
                string requestFile = regex.Replace(rawUrl, Globals.ApplicationPath + urlItem.WriteTo.Replace("^", "&"));   
      
                if (requestFile.IndexOf("?") > 0)   
                {   
                    filePath = requestFile.Substring(0, requestFile.IndexOf("?"));   
                }   
                else  
                {   
                    filePath = requestFile;   
                }   
      
                string inputFile = context.Request.PhysicalApplicationPath + filePath;   
                string path = context.Request.PhysicalApplicationPath + rawUrl.ToLower().Replace(".aspx", ".html");   
                if (applicationPath != "/")   
                {   
                    inputFile = inputFile.Replace(applicationPath + "/", @"\");  
                    path = path.Replace(applicationPath + "/", "").Replace("/", @"\");  
                }  
                else  
                {  
                    path = path.Replace("/", @"\");  
                }  
     
                if (!urlItem.EnabledToStatic)  
                {  
                    // asp.net 1.1 采用下面方法编译页面  
                    //PageParser.GetCompiledPageInstance( filePath , inputFile , context ).ProcessRequest( context );  
                    IHttpHandler hander = BuildManager.CreateInstanceFromVirtualPath(filePath, typeof(Page)) as IHttpHandler;  
                    hander.ProcessRequest(context);  
     
                    return;  
                }  
     
                if (!File.Exists(path))  
                {  
                    // asp.net 1.1 采用下面方法编译页面  
                    //PageParser.GetCompiledPageInstance( filePath , inputFile , context ).ProcessRequest( context );  
                    IHttpHandler hander = BuildManager.CreateInstanceFromVirtualPath(filePath, typeof(Page)) as IHttpHandler;  
                    hander.ProcessRequest(context);  
                    context.Response.Filter = new AspxBoy.BuildHtmlDemo.ToHtmlFilter(context.Response.Filter, path);  
     
                    return;  
                }  
     
                if (urlItem.Minutes == Int32.MaxValue)  
                {  
                    context.Server.Transfer(rawUrl.ToLower().Replace(".aspx", ".html"));  
                }  
                else  
                {  
                    FileInfo fileInfo = new FileInfo(path);  
                    if (fileInfo.LastWriteTime.AddMinutes((double)urlItem.Minutes) < DateTime.Now)  
                    {  
                        fileInfo.Delete();  
     
                        // asp.net 1.1 采用下面方法编译页面  
                        //PageParser.GetCompiledPageInstance( filePath , inputFile , context ).ProcessRequest( context );  
                        IHttpHandler hander = BuildManager.CreateInstanceFromVirtualPath(filePath, typeof(Page)) as IHttpHandler;  
                        hander.ProcessRequest(context);  
                        context.Response.Filter = new AspxBoy.BuildHtmlDemo.ToHtmlFilter(context.Response.Filter, path);  
                    }  
                    else  
                    {  
                        context.Server.Transfer(rawUrl.ToLower().Replace(".aspx", ".html"));   
                    }   
                    return;   
                }   
            }  

  • 相关阅读:
    CSS学习笔记 糖不苦
    Servlet与HTTP介绍学习 糖不苦
    new 的原理和实现 糖不苦
    HTML学习笔记 糖不苦
    事务的概念,以及事务在JDBC编程中处理事务的步骤 糖不苦
    前端JS获取用户位置 糖不苦
    数据接口请求异常:parsererror 糖不苦
    所有CSS字体属性 糖不苦
    jQuery CSS样式方法
    jQuery效果隐藏/显示,淡入/淡出,滑动,动画
  • 原文地址:https://www.cnblogs.com/VinC/p/1991087.html
Copyright © 2011-2022 走看看