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 ...
}
}
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 ...{
}
一個是一個頁面轉換的類,該類通過靜態函式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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在Asp.net MVC中訪問靜態頁面ASP.NETMVC
- Nginx 部署靜態頁面Nginx
- php 生成靜態頁面PHP
- PHP生成靜態頁面PHP
- ASP.NET動態生成html頁面ASP.NETHTML
- Laravel diary_靜態頁面Laravel
- 用typescript寫靜態頁面TypeScript
- java 做頁面靜態化Java
- 將動態aspx頁面,儲存為靜態htm檔案 (轉)
- ASP.NET 2.0中動態修改頁面標題ASP.NET
- PHP 實現頁面靜態化PHP
- 靜態頁面佈局例項
- Nginx - 動態匹配路由中的ID並跳轉到靜態頁面Nginx路由
- aspx頁面中動態建立控制元件 (轉)控制元件
- vite 構建工具 如何熱更新靜態頁面?自動重新整理頁面Vite
- 【靜態頁面架構】CSS之列表架構CSS
- 【靜態頁面架構】CSS之表格架構CSS
- 1.9 靜態頁面佈局例項
- 前端靜態頁面問題彙總前端
- Laravel頁面靜態化最佳實踐Laravel
- 頁面靜態化技術演進
- 前端靜態頁面快速迭代工具前端
- DiscuzQ動態頁面SEO方案
- 實戰電商頁面1:靜態佈局
- Spring Boot返回靜態錯誤頁面Spring Boot
- 編寫靜態頁面經驗總結
- [xx專案前端靜態頁面二]財務主頁前端
- Asp.net實現靜態頁-新增新聞生成靜態頁ASP.NET
- 動態載入頁面--小練
- 網頁渲染方式-從靜態頁面到服務端渲染網頁服務端
- 動態SQL——構造通用動態頁面查詢SQL
- 【靜態頁面架構】CSS之盒子模型架構CSS模型
- 【靜態頁面架構】CSS之選擇器架構CSS
- 360安全衛士靜態頁面(html+css)HTMLCSS
- 使用vuepress搭建GitHub pages靜態部落格頁面VueGithub
- 關於論壇JSP頁面靜態化JS
- nginx狀態資訊頁面Nginx
- 小程式頁面動態配置實現