Asp.Net動態(tài)頁面轉(zhuǎn)換
作者:佚名
本文介紹Asp.Net動態(tài)頁面轉(zhuǎn)靜態(tài)頁面的方法網(wǎng)上比較多,我在網(wǎng)上找了一些源代碼,并作修改?,F(xiàn)在把修改后的代碼以及說明寫一下。
關(guān)于在Asp.Net動態(tài)頁面轉(zhuǎn)靜態(tài)頁面的方法網(wǎng)上比較多。結(jié)合實際的需求,我在網(wǎng)上找了一些源代碼,并作修改。現(xiàn)在把修改后的代碼以及說明寫一下。
一個Asp.Net動態(tài)頁面轉(zhuǎn)換的類,該類通過靜態(tài)函數(shù)Changfile()來實現(xiàn),Asp.Net動態(tài)頁面到靜態(tài)頁面的轉(zhuǎn)換。
- 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);
- }
- }
- }
- 在頁面文件中,F(xiàn)orURL.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 ...{
- }
- }
【編輯推薦】
責任編輯:佚名
來源:
51CTO.com