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






3.39/5 (8投票s)
2004年4月1日
3分钟阅读

87108

1596
这个框架允许网站分离代码和URL。URL可以在XML配置文件中指定,并允许映射到用户控件。
引言
这个框架允许网站分离代码和URL。URL可以在XML配置文件中指定,并允许映射到用户控件。
背景
由于代码可以基于对象、设计模式和控件,它们并不总是与直观的URL相匹配。使用自定义URL的另一个原因是它们可以独立于技术。例如,产品页面的URL可以是[sitename]/products/?category=1而不是[sitename]/products.aspx?category。如果我们从.aspx扩展名移到.asx*(或任何其他扩展名),我们不必担心我们的合作伙伴更改指向我们页面的链接。
使用代码
警告
似乎执行URLRewrite
的HttpModule
不允许在任何版本的Visual Studio中打开Web项目。所以解决方法(我可能应该花更多时间在这上面……或者不)是在完成并准备好检入代码后,注释掉对Web.Config中重写模块的引用。当您打开Web项目时,您可以取消注释对web.config中HTTP模块的引用。
使用框架
- 将Chameleon.dll复制到bin目录
- 添加对它的引用
- 将HTTP模块信息添加到
system.web
部分下的web.config中。注意:关闭/检入项目时删除此信息,因为它不允许从Visual Studio .NET打开项目。<httpModules> <add type="Chameleon.Rewriter.CustomRewriteModule,Chameleon" name="Chameleon.Rewriter" /> </httpModules>
- 转到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
- 更改default.aspx中的
form
标签,以使用我们的自定义form对象(它继承自HTMLForm
)。<%@ Register TagPrefix="Chameleon" Namespace="Chameleon.Rewriter" assembly="Chameleon"%>
将
form
标签替换为<CHAMELEON:CUSTOMHTMLFORM id="FormDefault" runat= "server"></CHAMELEON:CUSTOMHTMLFORM>
工作原理
代码中有3个重要的部分让它以这种方式运行。
- 执行重写的
HttpModule
。 - 第二个部分试图解决发布回正确URL(浏览器中看到的URL,即/products/)而不是重写后的URL(default.aspx?etc etc)的问题。 Richard Kirby的文章使用ASP.NET进行URL重写解决了重写问题,但没有解决回发问题。 这正是我在这篇文章中解决的问题。
由于ASP.NET将变量分配给默认
form
对象中的action
标签,因此我们必须创建自己的form,该form继承自HtmlForm
并覆盖action
标签。 - 第三部分允许我们加载配置文件XML文件中指定的用户控件(.ascx)。 这部分本可以成为核心 Chameleon DLL 的一部分,但被故意保留在外部,以便人们可以灵活地修改或自定义它以满足他们的需求。