Asp.Net中动态页面转静态页面

日期: 2008-06-11 来源:TechTarget中国

  关于在Asp.Net中动态页面转静态页面的方法网上比较多。结合实际的需求,我在网上找了一些源代码,并作修改。现在把修改后的代码以及说明写一下。


  一个是一个页面转换的类,该类通过静态函数Changfile()来实现,动态页面到静态页面的转换。


  using System;
  using System.Data;
  using System.Configuration;
  using System.Web;
  using System.Web.Security;
  using System.Web.UI;
  using System.Web.UI.WebControls;
  using System.Web.UI.WebControls.WebParts;
  using System.Web.UI.HtmlControls;
  using System.Text;
  using System.IO;


  /**//// <summary>
  /// Summary description for HtmlProxy
  /// </summary>
  public class HtmlProxy
  …{
  public HtmlProxy()
  …{
  }
  public static bool ChangeFile(int id)
  …{
  string filename = HttpContext.Current.Server.MapPath(“Post_” + id + “.html”);
  //尝试读取已有文件
  Stream st = GetFileStream(filename);
  //如果文件存在并且读取成功
  if (st != null)
  …{
  using (st)
  …{
  StreamToStream(st, HttpContext.Current.Response.OutputStream);
  return true;
  //Response.End();
  }
  }
  else
  …{
  StringWriter sw = new StringWriter();
  HttpContext.Current.Server.&#101xecute(“ForumDetail.aspx?PID=” + id, sw);


  string content = sw.ToString();
  //写进文件
  try
  …{
  using (FileStream fs = new FileStream(filename, FileMode.create, FileAccess.Write, FileShare.Write))
  …{
  using (StreamWriter stw = new StreamWriter(fs, HttpContext.Current.Response.ContentEncoding))
  …{
  stw.Write(content);
  }
  }
   return true;
  }
  catch …{ return false; }
  }
  }


  private static Stream GetFileStream(string filename)
  …{
  try
  …{
  DateTime dt = File.GetLastWriteTime(filename);
  TimeSpan ts = dt – DateTime.Now;
  if (ts.TotalHours >1)
  …{
  //一小时后过期
  return null;
  }
  return new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
  }
  catch …{ return null; }
  }
  static public void StreamToStream(Stream src, Stream dst)
  …{
    byte[] buf = new byte[4096];
    while (true)
  …{
  int c = src.Read(buf, 0, buf.Length);
  if (c == 0)
  return;
  dst.Write(buf, 0, c);
   }
   }
  }


  在页面文件中,ForURL.aspx的后台代码如下:


  protected void Page_Load(object sender, EventArgs e)
  …{
  try
  …{
  int id = int.Parse(Request.QueryString[“PID”]);
  if(HtmlProxy.ChangeFile(id))
  …{
   Response.Redirect(“Post_” + id + “.html”);
  }
   else
  …{
   Response.Redirect(“Post.aspx?PID=” + id );
  }
  }
   catch …{
  }
  }

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐