• ASP.net静态化


    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文件!  

  • 相关阅读:
    作业6
    作业8
    作业7
    作业5
    作业4
    作业3
    作业2
    作业1
    浏览器跨域的细节
    解析node-cors模块
  • 原文地址:https://www.cnblogs.com/zhangqifeng/p/1685432.html
Copyright © 2020-2023  润新知