65.9K
CodeProject 正在变化。 阅读更多。
Home

Chameleon:一个完整的 URL 重写框架

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.39/5 (8投票s)

2004年4月1日

3分钟阅读

viewsIcon

87108

downloadIcon

1596

这个框架允许网站分离代码和URL。URL可以在XML配置文件中指定,并允许映射到用户控件。

引言

这个框架允许网站分离代码和URL。URL可以在XML配置文件中指定,并允许映射到用户控件。

背景

由于代码可以基于对象、设计模式和控件,它们并不总是与直观的URL相匹配。使用自定义URL的另一个原因是它们可以独立于技术。例如,产品页面的URL可以是[sitename]/products/?category=1而不是[sitename]/products.aspx?category。如果我们从.aspx扩展名移到.asx*(或任何其他扩展名),我们不必担心我们的合作伙伴更改指向我们页面的链接。

使用代码

警告

似乎执行URLRewriteHttpModule不允许在任何版本的Visual Studio中打开Web项目。所以解决方法(我可能应该花更多时间在这上面……或者不)是在完成并准备好检入代码后,注释掉对Web.Config中重写模块的引用。当您打开Web项目时,您可以取消注释对web.config中HTTP模块的引用。

使用框架

  1. Chameleon.dll复制到bin目录
  2. 添加对它的引用
  3. 将HTTP模块信息添加到system.web部分下的web.config中。注意:关闭/检入项目时删除此信息,因为它不允许从Visual Studio .NET打开项目。
    <httpModules> 
        <add type="Chameleon.Rewriter.CustomRewriteModule,Chameleon" 
        name="Chameleon.Rewriter" /> 
    </httpModules>
  4. 转到Internet Information Services Admin实用程序。 在IIS admin| 虚拟目录| 配置|映射选项卡中,为项目运行所在的虚拟目录添加一个新条目。以下是每个字段的值:(此外,这里是Richard Kirby的文章使用ASP.NET进行URL重写中对该技术的引用。)

    executable:C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll
    extension : .*
    limitto:HEAD,GET,POST
    script engine checked
    check the file exists unchecked
  5. 更改default.aspx中的form标签,以使用我们的自定义form对象(它继承自HTMLForm)。
    <%@ Register TagPrefix="Chameleon" 
      Namespace="Chameleon.Rewriter" assembly="Chameleon"%>

    form标签替换为<CHAMELEON:CUSTOMHTMLFORM id="FormDefault" runat= "server"></CHAMELEON:CUSTOMHTMLFORM>

工作原理

代码中有3个重要的部分让它以这种方式运行。

  1. 执行重写的HttpModule
  2. 第二个部分试图解决发布回正确URL(浏览器中看到的URL,即/products/)而不是重写后的URL(default.aspx?etc etc)的问题。 Richard Kirby的文章使用ASP.NET进行URL重写解决了重写问题,但没有解决回发问题。 这正是我在这篇文章中解决的问题。

    由于ASP.NET将变量分配给默认form对象中的action标签,因此我们必须创建自己的form,该form继承自HtmlForm并覆盖action标签。

  3. 第三部分允许我们加载配置文件XML文件中指定的用户控件(.ascx)。 这部分本可以成为核心 Chameleon DLL 的一部分,但被故意保留在外部,以便人们可以灵活地修改或自定义它以满足他们的需求。
© . All rights reserved.