草根站长论坛's Archiver

admin 发表于 2008-4-27 13:09

Asp.Net中动态页面转静态页面,想优化的进来学下

关于在Asp.Net中动态页面转静态页面的方法网上比较多。结合实际的需求,我在网上找了一些源代码,并作修改。现在把修改后的代码以及说明写一下。
W7W{,u3kO,H#Hdy$N ~j/A&fKm
  一个是一个页面转换的类,该类通过静态函数Changfile()来实现,动态页面到静态页面的转换。  [code]using System;
R ]1x-l0@`!j
9F2D` p~*l   using System.Data;)Tn B4K9l ?
  using System.Configuration;
F^DnS:[#o   using System.Web;OY;M#Tm Z:}
  using System.Web.Security;~lao1a8Uq
  using System.Web.UI;
/ES0b E Y7Z   using System.Web.UI.WebControls; S*q-S-{9r6I
  using System.Web.UI.WebControls.WebParts;
*?NH;y2T Z:b?   using System.Web.UI.HtmlControls;
Obm-`/^%JLR![*d   using System.Text;
J&VGT F&\i#Ub!T   using System.IO;
O SA?ba   /**////B1}3H4BE4{&m [
  /// Summary description for HtmlProxy
#dLHFHa|   ///
t/^,MeT1H7e4l   public class HtmlProxy
'o6})J0IH+m   ...{+k9h es+J;Uq
  public HtmlProxy()
X w jz ],H-J   ...{2xE ?Y%r,W'Hw
  }
h%cg7eQg6a   public static bool ChangeFile(int id)
R(Gz.\kY1q:| X   ...{p H&F |,E;mE1M
  string filename = HttpContext.Current.Server.MapPath("Post_" + id + ".html");2Vp iG3z
  //尝试读取已有文件   Stream st = GetFileStream(filename);$Lp&` z;b$qI[/[
  //如果文件存在并且读取成功zMP7oI
  if (st != null)4xH9^ PYU5^}p
  ...{
Bl+? ?^U,JwC   using (st)%H)LhE&gGqs
  ...{l8N6IuEQ-{T
  StreamToStream(st, HttpContext.Current.Response.OutputStream);$HF\&c,kw {g
  return true;
|vMq'_ o   //Response.End();
.R%E{'S p Xm0??   }
o,?#@(a!r2r   }wad,c*kG-y0w)qD
  else
VL} v2L4h   ...{#Dx%N1F/e)[
  StringWriter sw = new StringWriter();6Ih4U C#Z*\p
  HttpContext.Current.Server.Execute("ForumDetail.aspx?PID=" + id, sw);
u;Y!h6Zk2u7f TH   string content = sw.ToString();"u`F _t:Oe0m n
  //写进文件 try7~vs!^id
  ...{RC$K7wG5a _*q!t
  using (FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.Write))VJ-y$Tf2I4lxn
  ...{0b@1dt1Jg/},\
  using (StreamWriter stw = new StreamWriter(fs, HttpContext.Current.Response.ContentEncoding))#s vR)s;? N
  ...{
IU%O3e&f%eV   stw.Write(content);1J Fv,K;y8o/^Kz8j6Gt
  }
:G7PF!o2J   }.j T6ORM
  return true;
6Q/JK"I~d#r   }/f/] k2Fz*T%j
  catch ...OiL#AH&s.u+L_
  }
B6E-kt^K I   }*J'KC5V7GB8?v7Y
  private static Stream GetFileStream(string filename)7un TN)K,BJ&bbG%f
  ...{5DD)S"tAJ
  tryhZu9zi&fPc h9@q
  ...{0`b,o!{h7}f$~
  DateTime dt = File.GetLastWriteTime(filename);
~8]2AqG   TimeSpan ts = dt - DateTime.Now;pK\1c9[/fHYU ~
  if (ts.TotalHours >1)
'Y"Oh#?2w7Iy!k'A   ...{x4s+i+FSr(?
  //一小时后过期
{,K0F&MD1`}_   return null;tkXdW3]
  }:T|H E8v)\p
  return new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);3^.L ] U?2}4MyO EKz
  }
,[Yc']9PS_   catch ...
~3M:okvZ   }
,_ZH$}Q~;Utw   static public void StreamToStream(Stream src, Stream dst)1FBaD)iY
  ...{#{#qo-JueOvV
  byte[] buf = new byte[4096];
0j t$j)U#z U ]bZfL,s   while (true)
3_vrB~8X   ...{
(MA'M,c3M(u.Ql   int c = src.Read(buf, 0, buf.Length);
:I^ },za;Vv/y-G]   if (c == 0)
&z)t;N(W}i#l   return; wo,CZ1M
  dst.Write(buf, 0, c); {z.T!`0kDk q#j3l
  }
C|.hc Cc u   }
'rn3b&d]   }
?7d |S V IO   在页面文件中,ForURL.aspx的后台代码如下:
$j$| V7v[   protected void Page_Load(object sender, EventArgs e){0Y lZ(gm"f5JC
  ...{
)Z C4C$`)Y o(L   try
)z;c&_ t R3e(v3Q0i   ...{
'JG'{ F;q)QVQ   int id = int.Parse(Request.QueryString["PID"]);L Im}s7F7i)]
  if(HtmlProxy.ChangeFile(id))6Y2v [aB ~DE*w8t
  ...{lCb,qV
  Response.Redirect("Post_" + id + ".html");
"q*N x1O+F Eh+O3w_w7S   }K_Am b%Q)Lk
  else
:qG]L2V   ...{jNM9`BeA)H~
  Response.Redirect("Post.aspx?PID=" + id );
$n6E*e D7Dye2w   }
MV6Se0B5d5\1]|   }
F;w'{7w3T^L(?V4S   catch ...{
'suY}D2Np^k1h/?   }[/code]

页: [1]

Powered by 草根站长网 © 2007-2008