• ----:)欢迎访问源码网(:----
    • 首页
    • 博客
    • 学院
    • 下载
    • 论坛
    • 影视
    • 发布源码
    • RSS
    • ITPig
    • 笑话网
    • 百家姓
    • 繁體中文

源码网 - 中国第一源码门户
选择镜像:网通镜像 - 电信主站
  • 首 页
  • 新闻动态
  • 网站运营
  • 网页制作
  • WEB开发
  • 编程开发
  • 图像媒体
  • 操作系统
  • 数据库
  • 服务器
热门搜索 优化 SEO 故事 cms IIS7 MySQL 个人 AdSense 主题推广 | 文章搜索: 高级搜索
会员登录/控制面版您的位置: 学院首页 >> WEB开发 >> .NET 开发 >> 详细内容
 

推荐文章

 
 

热点文章

  • FckEditor远程图片下载插件
  • IIS过滤器实现.NET程序不破解DLL替换字符串一法
  • 为ASP.NET封装的SQL数据库访问类
  • Url地址重写,利用HttpHander手工编译页面并按需生成静..
  • ASP.NET2.0中文验证码的实现
  • asp.net生成缩略图及给原始图加水印
  • ASP.NET学习笔记一——ASP和ASP.NET比较
  • ASP.NET学习笔记二——简单Web控件使用
  • Ajax简单客户登陆验证
  • 获取指定IP的终端的MAC地址
  • 使用HtmlInputHidden 控件在本页面保持状态和跨页面传..
  • DoNet控件嵌套
 
 

相关文章

 
 

百度搜索

 
 

Url地址重写,利用HttpHander手工编译页面并按需生成静态HTML文件

  • 阅览次数:
  • 文章来源: CP整理
  • 原文作者: 武眉博<活靶子.NET>
  • 整理日期: 2007-12-31
  • 发表评论
  • 字体大小:
  • 小
  • 中
  • 大

很多朋友可能都讨论过ASP.NET中生成HTML的方法了,有按照模板用IO方法写文件
有在404错误页面内生成HTML的,有在Render内保存页面输出到HTML文件的。
今天我发一个配合Url重写利用HttpHander手工编译.aspx页面方法。
HTML文件的方法,可按需、“定时”的生成,以减轻数据库的访问。
声明:下面的文字是本文不可缺少的部分,转载请保留,谢谢!
////////////////////////////////////////////////////
作者:武眉博<活靶子.NET>
同时首发于:
   
落伍者   && 博客园  
   
开发者学院   && .Net男孩社区
知识点:UrlRewrite、 IHttpModule、 IHttpHander 的编写
效果:
http://www.devedu.com/Doc/DotNet/AspNet/default.2.aspx
http://www.devedu.com/Doc/DotNet/AspNet/default.2.html
思路:
1 挂载“.aspx"的请求到自定义的Httphander内
2 配置URL重写规则
3 访问某.aspx文件时,在HttpHander内 根据配置确定是否应该生成
接着...
if(需要生成)
{
  if(若已经生成html文件 )
  {
   if(文件并未过期)
   {
    则直接定向(Server.Transfer())。
   }
   else
   {
    删除HTML文件;
    重新编译.aspx(Page内数据库操作等等)
    生成HTML文件;
   }
  }
  else if(尚未生成文件)
  {
   生成Html。
  }
}
else
{
  则编译.aspx文件
}
另:建议阅读一下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
部分代码:

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;
            }
        }

 

示例项目下载:BuildHtmlDemo.rar

上一篇:比AcdSee功能还强大的图片处理、编辑软件,推荐下载!
下一篇:ASP上传漏洞防范
  • 网友评论:
  • 查看所有评论
  • 我要发表评论
您的网名:
留言主题:
你要发表的内容:

 

关于本站 | 广告联系 | 版权声明 | 网站地图 | 发布软件 | 帮助中心 | 源码论坛

Copyright © 2005-2007 CodePub.Com  程序支持:木翼  滇ICP备05005971号