asp.net页面静态化

将asp.net页面静态化有很大意义,在些我就不多说了,实现asp.net页面静态化有很多种方面,在此我介绍一种在asp.net内实现的方法。大家都知道,每个asp.net页面都有一个特定的类对其进行处理,默认情况下该类是从Page类派生的。我们所要做的就是从Page类派生自己的类改写特定的方法。具体实现如下:
using
System;
using
System.Data;
using
System.Configuration;
using
System.Linq;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.HtmlControls;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Xml.Linq;
using
System.IO;
public class FreezablePage : System.Web.UI.Page { //
When Asp.Net renders the page the Page.Render method is invoked
// Override the method to hook in


protected void Page_Load(object sender, EventArgs e)
{
//
Response.HeaderEncoding = System.Text.Encoding.UTF8;
//Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");


Freeze(
string.Format(@"{0}.htm", Request.Url.ToString()));
}
protected override void
Render(HtmlTextWriter writer)
{
if
(freeze)
{
MyHtmlFileCreator htmlFile
= new
MyHtmlFileCreator();
// Let Asp.net render the output, catch it in the file creator

base.Render(htmlFile.RenderHere);
newUrl
=
HttpContext.Current.Request.Url.AbsolutePath.ToString();
newUrl
= newUrl.Replace(".aspx", ".htm"
);
//
Response.HeaderEncoding = System.Text.Encoding.UTF8;
//Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312"); // Write new html file

htmlFile.WriteHTMLFile(Server.MapPath(newUrl));
// Redirect


Response.Redirect(newUrl,
true);
}
else

{
// Default behavior
base.Render(writer);
}
}
// Flag render event

protected void Freeze()
{
freeze
= true
;
}
protected void Freeze(string
toUrl)
{
freeze
= true
;
NewUrl
=
toUrl;
}
private bool freeze = false
;
private string
newUrl;
internal string
NewUrl
{
get

{
return newUrl;
}
set

{
newUrl
= value;
}
}
}
internal class
MyHtmlFileCreator
{
private
StringWriter html;
private
MyHtmlTextWriter htmlWriter;
//
override the HtmlTextWriter to reach the constructor
// the constructor in the base class is protected

class MyHtmlTextWriter : HtmlTextWriter
{
internal MyHtmlTextWriter(TextWriter tw) : base
(tw) { }
}
// publish the HTMLwriter

internal HtmlTextWriter RenderHere
{
get { return
htmlWriter; }
}
//
constructor initializes stringwriter and htmlwriter based on that
// initialize Url

internal MyHtmlFileCreator()
{
html
= new
StringWriter();
htmlWriter
= new
MyHtmlTextWriter(html);
}
internal void WriteHTMLFile(string
virtualFileName)
{
//
Stringreader reads output rendered by asp.net
// Stringwriter writes html output file

StringReader sr = new StringReader(html.ToString());
StringWriter sw
= new
StringWriter();
// Read from input

string htmlLine = sr.ReadLine();
while (htmlLine != null
)
{
//// Filter out ASp.net specific tags

//if (!((htmlLine.IndexOf("<form") > 0) ||
//
(htmlLine.IndexOf("__VIEWSTATE") > 0) ||
//
(htmlLine.IndexOf("</form>") > 0)))
//{ sw.WriteLine(htmlLine); }

sw.WriteLine(htmlLine);
htmlLine
=
sr.ReadLine();
}
// Write contents stringwriter to html file

StreamWriter fs = new StreamWriter(virtualFileName,false,System.Text.Encoding.UTF8);
//StreamWriter f=new StreamWriter(

fs.Write(sw.ToString());
fs.Close();
}
}
posted @   silverPerson  阅读(845)  评论(1编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示