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 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 Response.Redirect(newUrl, true); } else { // Default behavior } } // Flag render event { 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 { internal MyHtmlTextWriter(TextWriter tw) : base(tw) { } } // publish the HTMLwriter { get { return htmlWriter; } } // constructor initializes stringwriter and htmlwriter based on that // initialize Url { html = new StringWriter(); htmlWriter = new MyHtmlTextWriter(html); } internal void WriteHTMLFile(string virtualFileName) { // Stringreader reads output rendered by asp.net // Stringwriter writes html output file StringWriter sw = new StringWriter(); // Read from input while (htmlLine != null) { //// Filter out ASp.net specific tags // htmlLine } // Write contents stringwriter to html file //StreamWriter f=new StreamWriter( fs.Close(); } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?