在看《ASP.NET 2.0编程珠玑》这本书时,我了解到了URL Rewrite。
本书中的示例是通过修改Web.config去达到URL Rewrite的目的,通过自己上网查找,可以实现这个功能的组件和方法还是很多的。由于时间原因,只学习了两种。一种是ASP.NET 2.0编程珠玑书中的,一种是通过MS的URLRewriter来实现的。
1,
在<system.web></system.web>中添加配置节点
<system.web>
<urlMappings enabled="true">
<add url="~/2006"
mappedUrl="~/Chapter1/YearView.aspx?year=2006"/>
<add url="~/2005"
mappedUrl="~/Chapter1/YearView.aspx?year=2005"/>
<add url="~/2006/01"
mappedUrl="~/Chapter1/MonthView.aspx?year=2006&month=01"/>
<add url="~/2006/02"
mappedUrl="~/Chapter1/MonthView.aspx?year=2006&month=02"/>
<add url="~/2005/01"
mappedUrl="~/Chapter1/MonthView.aspx?year=2005&month=01"/>
<add url="~/2005/02"
mappedUrl="~/Chapter1/MonthView.aspx?year=2005&month=02"/>
</urlMappings>
</system.web>
然后,前台的客户端就可以添加类似的超链接
<asp:HyperLink ID="HyperLink1" NavigateUrl="~/2005" runat="server">2005</asp:HyperLink>
<asp:HyperLink ID="HyperLink1" NavigateUrl="~/2005" runat="server">2005</asp:HyperLink>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/YEAR/01">01</asp:HyperLink><br />
<asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl="~/YEAR/02">02</asp:HyperLink><br />
<asp:HyperLink ID="HyperLink3" runat="server" NavigateUrl="~/YEAR/03">03</asp:HyperLink><br />
<asp:HyperLink ID="HyperLink4" runat="server" NavigateUrl="~/YEAR/04">04</asp:HyperLink><br />
<asp:HyperLink ID="HyperLink5" runat="server" NavigateUrl="~/YEAR/05">05</asp:HyperLink><br />
<asp:HyperLink ID="HyperLink6" runat="server" NavigateUrl="~/YEAR/06">06</asp:HyperLink><br />
<asp:HyperLink ID="HyperLink7" runat="server" NavigateUrl="~/YEAR/07">07</asp:HyperLink><br />
<asp:HyperLink ID="HyperLink8" runat="server" NavigateUrl="~/YEAR/08">08</asp:HyperLink><br />
<asp:HyperLink ID="HyperLink9" runat="server" NavigateUrl="~/YEAR/09">09</asp:HyperLink><br />
<asp:HyperLink ID="HyperLink10" runat="server" NavigateUrl="~/YEAR/10">10</asp:HyperLink><br />
<asp:HyperLink ID="HyperLink11" runat="server" NavigateUrl="~/YEAR/11">11</asp:HyperLink><br />
<asp:HyperLink ID="HyperLink12" runat="server" NavigateUrl="~/YEAR/12">12</asp:HyperLink><br />
当点击超链接的时候,地址栏只会显示http://localhost:2537/WebDemo/2005/01,实际上是连接到了http://localhost:2537/WebDemo、Chapter1/MonthView.aspx?year=2006&month=01
2,
首先:现在MSDNURLRewriting,安装完成后,在安装目录下找到ActionlessForm ,URLRewriter。分别找的他们bin目录下的ActionlessForm.dll 和 URLRewriter.dll。然后添加到你的项目中。
第二:修改配置文件
在<configuration></configuration>中添加如下节点
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler,URLRewriter"/>
</configSections>
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/(\d{4})/(\d{2})/(\d{2})</LookFor>
<SendTo>~/GuanTestURLRewrit/ShowBlogContent.aspx?year=$1&month=$2&day=$3</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/(\d{4})/(\d{2})/(\d{2})/Default\.html</LookFor>
<SendTo>~/GuanTestURLRewrit/ShowBlogContent.aspx?year=$1&month=$2&day=$3</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/(\d{4})/(\d{2})/Default\.html</LookFor>
<SendTo><![CDATA[~/GuanTestURLRewrit/ShowBlogContent.aspx?year=$1&month=$2]]></SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/(\d{4})/Default\.html</LookFor>
<SendTo>~/GuanTestURLRewrit/ShowBlogContent.aspx?year=$1</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
在<system.web></system.web>中添加下面的节点
<httpModules>
<add type="URLRewriter.ModuleRewriter,URLRewriter" name="ModuleRewriter"/>
</httpModules>
现在配置文件基本修改完成。下面是客户端代码:
<asp:HyperLink ID="hyYear" NavigateUrl="2003/Default.html" runat="server" Width="110px">Year</asp:HyperLink><br />
<asp:HyperLink ID="hyYearAndMonth" NavigateUrl="2003/12/Default.html" runat="server" Width="110px">Year and Month</asp:HyperLink><br />
<asp:HyperLink ID="hyYearMonthAndDay" NavigateUrl="2003/12/21/Default.html" runat="server" Width="247px">Year Month and Day</asp:HyperLink><br />
这样当我们点击按钮的时候,就会通过配置文件的正则表达式,去找到真正的路径。
例如:我们点击的是http://localhost:12003/Demo/2003/Default.html实际上的路径为:http://localhost:12003/Demo/GuanTestURLRewrit/ShowBlogContent.aspx?year=2003
相对而言,后者比较灵活,可以应用正则表达式。
出处:http://www.cnblogs.com/icebutterfly/
版权:本文版权归作者和博客园共有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任