zoukankan      html  css  js  c++  java
  • 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文件!  

  • 相关阅读:
    ASP.NET在禁用视图状态的情况下仍然使用ViewState对象【转】
    Atcoder Regular Contest 061 D Card Game for Three(组合数学)
    Solution 「CERC 2016」「洛谷 P3684」机棚障碍
    Solution 「CF 599E」Sandy and Nuts
    Solution 「洛谷 P6021」洪水
    Solution 「ARC 058C」「AT 1975」Iroha and Haiku
    Solution 「POI 2011」「洛谷 P3527」METMeteors
    Solution 「CF 1023F」Mobile Phone Network
    Solution 「SP 6779」GSS7
    Solution 「LOCAL」大括号树
  • 原文地址:https://www.cnblogs.com/zhangqifeng/p/1685432.html
Copyright © 2011-2022 走看看