zoukankan      html  css  js  c++  java
  • ASP.NET伪静态实现

    1.什么是伪静态?使用伪静态的作用是什么?

    定义:动态网页通过重写URL的方法实现去掉动态网页的参数,但在实际的网页目录中并没有必要实现存在重写的页面。

    例如:我们当访问地址http://www.cnblogs.com/ForEvErNoME/archive/2012/06/05/2529259.html时,你会认为在站点服务器下存在名为2529259.html文件,其实实际上它可能是不存在的,而可能你看到的内容是通过重定向/archive/article.aspx?year=2012&month=06&day=05&id=2529259显示出来的。

    为什么要这样做呢?

    (1)增强URL的友好性,方便用户记忆URL。

    (2)提高搜索引擎抓取,很多搜索引擎更看好静态HTML页。

    (3)加强安全性,因为隐藏了参数"year"、"month"、"day"、"id",使网站没有那么容易受到攻击。

    2.伪静态实现的基本思路

    (1)自定义HttpHandler类,实现IHttpHandler接口

    (2)获取用户请求的URL地址信息

    (3)定义多个正则表达式规则,匹配URL字符串

    (4)重定向真实的URL地址信息

    3.自定义UrlRewriter类

    原理:通过实现接口IHttpHandler来接管HTTP请求。

    (1)定义UrlRewriter.cs类

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Web;
     5 using System.Text;
     6 using System.Text.RegularExpressions;
     7 
     8 /// <summary>
     9 ///UrlRewriter 伪静态Url重写
    10 /// </summary>
    11 public class UrlRewriter:IHttpHandler
    12 {
    13     /// <summary>
    14     /// 自定义 HttpHandler
    15     /// </summary>
    16     /// <param name="context"></param>
    17     public void ProcessRequest(HttpContext context)
    18     {
    19         try
    20         {
    21             string url = context.Request.RawUrl;//获取用户请求的URL地址信息
    22             Regex Reg = new Regex(@"/detail-(\d+)-(\d+)\..+", RegexOptions.IgnoreCase);//建立正则表达式 
    23             Match m = Reg.Match(url, url.LastIndexOf("/"));//用正则表达式进行URL字符串
    24             if (m.Success)//匹配成功
    25             {
    26                 string RealPath = @"~/admin/detail.aspx?type=" + m.Groups[1] + "&id=" + m.Groups[2];//重定向真实的地址信息
    27                 context.Server.Execute(RealPath);
    28             }
    29             else
    30             {
    31                 context.Response.Redirect(context.Request.Url.ToString());
    32             }
    33 
    34         }
    35         catch (Exception ex)
    36         { 
    37             context.Response.Redirect(context.Request.Url.ToString());  
    38         }
    39     }
    40 
    41     /// <summary>  
    42     ///  如果 System.Web.IHttpHandler 实例可再次使用,则为 true;否则为 false。
    43     /// </summary>  
    44     public bool IsReusable
    45     {
    46         get { return false; }
    47     }
    48 }

     (2)在web.config中<system.web>节点下添加配置信息

    <?xml version="1.0"?>
    <configuration>
    <system.web>
      <httpHandlers>
        <!--使用自定义UrlRewriter类-->
        <add verb="*" path="*/detail-?*-?*.html" type="UrlRewriter"/>
        </httpHandlers>
        <compilation debug="true" targetFramework="4.0"/>
      </system.web>
    </configuration>

    解释:

    verb属性:是指处理程序支持的HTTP动作。如果某个处理程序支持所有的HTTP动作,请使用"*",否则使用逗号分隔的列表列出支持的动作。因此如果你的处理程序只支持HTTP "GET"和"POST",那么verb属性就应该是"GET", "POST"。

    path属性:指定了需要调用处理程序的路径和文件名(可以包含通配符)。例如,如果你希望自己的处理程序只有在test.html文件被请求的时候才被调用,那么path属性就包含”test.html“,如果你希望含有.html后缀的所有文件都调用处理程序,path属性应该为"*.html"。

    type属性:是指绑定的类名以及包括命名空间(如果有的话)。ASP.NET运行时首先搜索应用程序的bin目录中的部件DLL,接着在全局部件缓冲(GAC)中搜索。

    (3)打开网站输入http://localhost:28053/伪静态/detail-1-1.html,显示的是”admin/detail.aspx?type=1&id=1”的内容。(实例下载在文章最后)

    4.使用微软的URLRewriter.dll

    (1)添加URLRewriter.dll引用

    (2)配置web.config基本信息

    <?xml version="1.0"?>
    <configuration>
      <!--使用URLRewriter.dll -->
    <configSections>
      <section name="RewriterConfig" requirePermission="false" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
    </configSections>
    
    <RewriterConfig>
      <Rules>
        <RewriterRule>
          <LookFor>~/detail/([0-9]*)/([0-9]*).html</LookFor>
          <SendTo>~/admin/detail.aspx?type=$1&amp;id=$2</SendTo>
        </RewriterRule>
      </Rules>
    </RewriterConfig>
    
    <system.web>
      <httpHandlers>
        <!--使用URLRewriter.dll    -->
      <add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
      <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
    
    </httpHandlers>
        <compilation debug="true" targetFramework="4.0"/>
      </system.web>
    </configuration>

    简单介绍

    <RewriterConfig>
       <Rules>
       <RewriterRule>
          <LookFor>要查找的模式</LookFor>
          <SendTo>要用来替换模式的字符串</SendTo>
       </RewriterRule>
       <RewriterRule>
          <LookFor>要查找的模式</LookFor>
          <SendTo>要用来替换模式的字符串</SendTo>
       </RewriterRule>
       </Rules>
    </RewriterConfig>

    用reflector查看URLRewriter.dll,节点的信息是已经在类中定义好的,不能更改。

    (3)同样的,打开网站输入http://localhost:28053/伪静态/detail-1-1.html,显示的是”admin/detail.aspx?type=1&id=1”的内容。

    5.相关参考资料

    (1)在ASP.NET中执行URL重写

    (2)ASP.NET 实现伪静态网页方法

    (3)IIS7 伪静态 web.config 配置方法

    (4)ASP.NET伪静态页面的实现和伪静态在IIS7.0中的配置

     实例下载

    作者: ForEvErNoME
    出处: http://www.cnblogs.com/ForEvErNoME/
    欢迎转载或分享,但请务必声明文章出处。如果文章对您有帮助,希望你能 推荐关注
     
     
     
     
     
  • 相关阅读:
    LeetCode 623. Add One Row to Tree
    LeetCode 894. All Possible Full Binary Trees
    LeetCode 988. Smallest String Starting From Leaf
    LeetCode 979. Distribute Coins in Binary Tree
    LeetCode 814. Binary Tree Pruning
    LeetCode 951. Flip Equivalent Binary Trees
    LeetCode 426. Convert Binary Search Tree to Sorted Doubly Linked List
    LeetCode 889. Construct Binary Tree from Preorder and Postorder Traversal
    LeetCode 687. Longest Univalue Path
    LeetCode 428. Serialize and Deserialize N-ary Tree
  • 原文地址:https://www.cnblogs.com/ForEvErNoME/p/2549313.html
Copyright © 2011-2022 走看看