Asp.Net中動態頁面轉靜態頁面

iDotNetSpace發表於2009-01-05
關於在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 description for HtmlProxy
  ///
  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.Execute("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 ...
  }
  }
  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 ...
  }
  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 ...{
  }

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-526849/,如需轉載,請註明出處,否則將追究法律責任。

相關文章