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

关于在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 ...{ 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 ...{

}

}