关于在Asp.Net动态页面转静态页面的方法网上比较多。结合实际的需求,我在网上找了一些源代码,并作修改。现在把修改后的代码以及说明写一下。
一个Asp.Net动态页面转换的类,该类通过静态函数Changfile()来实现,Asp.Net动态页面到静态页面的转换。
- 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 ...{ 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 ...{
- }
- }
【编辑推荐】