现在的位置: 首页 > 综合 > 正文

asp.net页面静态化

2018年05月05日 ⁄ 综合 ⁄ 共 3482字 ⁄ 字号 评论关闭

方法一:

HtmlProxy.cs:

using System.Text;

using System.IO;

 

/// <summary>

/// HtmlProxy 的摘要说明

/// </summary>

public class HtmlProxy

{

     public HtmlProxy()

     {

         //

         // TODO: 在此处添加构造函数逻辑

         //

     }

    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    //文件不存在,根据ForumDetail.aspx页面的内容创建文件

        {

            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

        {

       }

 

}

方法二:在页面中继承此类即可,当访问的时候自动生成静态页面

change.cs:

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.IO;

/// <summary>

/// change 的摘要说明

/// </summary>

public class change : System.Web.UI.Page

 

{

     public change()

     {

         //

         // TODO: 在此处添加构造函数逻辑

         //

     }

    protected string FileName;

    protected override void OnInit(EventArgs e)

    {

        int count = Request.Url.AbsolutePath.Length;

        FileName = Request.Url.AbsolutePath.Remove(count - 4, 4) + "htm";//把要转换的页面后缀aspx去掉

        if (File.Exists(Server.MapPath(FileName)))

        {

            File.Delete(Server.MapPath(FileName));

        }

    }

 

    protected override void Render(HtmlTextWriter writer)

    {

        StringWriter html = new StringWriter();

        HtmlTextWriter tw = new HtmlTextWriter(html);

        base.Render(tw);

        StreamWriter sw = new StreamWriter(Server.MapPath(this.FileName), false, System.Text.Encoding.UTF8);

        sw.Write(html.ToString());

        sw.Flush();

        sw.Close();

        tw.Close();

        Response.Write(html.ToString());

    }

 

}

抱歉!评论已关闭.