1.伪静态(URL重写)

可引用 URLRewriter.dll 进行操作

在web.config中配置如下

 

  <RewriterConfig>
    <Rules>
      <RewriterRule>
        <LookFor>~/default(\d+)\.aspx</LookFor><!--重写规则 使用正则表达式-->
        <SendTo>~/default.aspx?id=$1</SendTo><!--替换规则  $1替换第一个转义字符  如此类推 -->
      </RewriterRule>

<!--如上规则是 访问default11时 就当是访问default.aspx?id=11-->


      <RewriterRule>
        <LookFor>~/index\.html</LookFor>
        <SendTo>~/default.aspx</SendTo>
      </RewriterRule>

<!--如上规则是 访问index.html时 访问default.aspx-->
    </Rules>
  </RewriterConfig>

 

  <httpHandlers>
        <add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
        <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
   </httpHandlers>

 

 

 

在重写后的url里如果产生回发用户浏览器中将会显示该aspx文件实际的地址,为了更加友好不显示真实URL地址,解决办法如下

 

代码
 1 using System;
 2 using System.IO;
 3 using System.Web;
 4 using System.Web.UI;
 5 namespace URL
 6 {
 7      public class OLPage : Page
 8      {
 9          public OLPage()
10          {}
11          protected override void Render(HtmlTextWriter writer)
12          {
13              if (writer is System.Web.UI.Html32TextWriter)
14              {
15                  writer = new FormFixerHtml32TextWriter(writer.InnerWriter);
16              }
17              else
18              {
19                  writer = new FormFixerHtmlTextWriter(writer.InnerWriter);
20              }
21              base.Render(writer);
22          }
23      }
24 
25      internal class FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter
26      {
27          private string _url; // 假的URL
28 
29      internal FormFixerHtml32TextWriter(TextWriter writer):base(writer)
30      {
31          _url = HttpContext.Current.Request.RawUrl;
32      }
33 
34      public override void WriteAttribute(string name, string value, bool encode)
35      {
36          if (_url != null && string.Compare(name, "action"true== 0)
37          {
38              value = _url;
39          }
40          base.WriteAttribute(name, value, encode);
41 
42          }
43      }
44 
45 internal class FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter
46 {
47      private string _url;
48      internal FormFixerHtmlTextWriter(TextWriter writer):base(writer)
49      {
50          _url = HttpContext.Current.Request.RawUrl;
51      }
52     
53      public override void WriteAttribute(string name, string value, bool encode)
54      {
55          if (_url != null && string.Compare(name, "action"true== 0)
56          {
57              value = _url;
58          }
59          base.WriteAttribute(name, value, encode);
60      }
61 }
62 
63 }
64 

 

把这个文件编译成dll,并在你的项目中引用它。


然后把项目中的所有aspx文件对应的cs文件中的继承page类的代码改写为继承OLPage。
例如
public class WebForm1:page
改写为
public class WebForm1:URL.OLPage

这样就解决回发问题。
编译*.dll方法:/t:library name.cs

 

 

2.静态化(模板替换)

 

 templet.htm文件

 

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    
<title>无标题页</title>
</head>
<body>
标题:$title
<br/>
内容:$content
</body>
</html>

 

 

 

模板替换处理的简单方法(可自行拓展)

 

代码
    public static string WriteFileMethod()
        {
            
string path = HttpContext.Current.Server.MapPath("test/");
            Encoding code 
= Encoding.GetEncoding("gb2312");
            
// 读取模板文件
            string temp = HttpContext.Current.Server.MapPath("templet.htm");
            StreamReader sr 
= null;
            StreamWriter sw 
= null;
            
string str = "";
            
try
            {
                sr 
= new StreamReader(temp, code);
                str 
= sr.ReadToEnd(); // 读取文件
            }
            
catch (Exception exp)
            {
                HttpContext.Current.Response.Write(exp.Message);
                HttpContext.Current.Response.End();
                sr.Close();
            }


            
string htmlfilename = DateTime.Now.ToString("yyyyMMddHHmmss"+ ".html";
            
// 替换内容
            
// 这时,模板文件已经读入到名称为str的变量中了
            str = str.Replace("$title""这是个测试标题"); //模板页中的ShowArticle
            str = str.Replace("$content""这是个测试内容!");
           
            
// 写文件
            try
            {
                sw 
= new StreamWriter(path + htmlfilename, false, code);
                sw.Write(str);
                sw.Flush();
                sw.Close();
                
return htmlfilename;
            }
            
catch (Exception ex)
            {
                HttpContext.Current.Response.Write(ex.Message);
                HttpContext.Current.Response.End();
                sw.Close();
            }
            
return "";
        }

 

调用此方法 后 就会在test文件夹下产生一个静态HTML文件!  

posted on 2010-03-14 12:22  冷傲残痕  阅读(5864)  评论(3编辑  收藏  举报