ASP.NET的URL Rewrite组件


  本文标签:URL Rewrite组件 ASP.NET

  可能已经没有人会使用上一篇ASP.NET文章中的方法进行URL Rewrite了,因为提供URL Rewrite组件早已铺天盖地了  。

  ASP.NET级别的URL Rewrite组件的原理很简单,其实只是监听BeginRequest事件,并且根据配置来决定目标URL  。在我之前接触过的项目中,发现使用URLRewriter作为URL Rewrite组件的频率非常高,我想可能是因为那是微软提供的东西吧  。

  如果要使用URLRewriter,首先自然就是在web.config中配置一个HttpModule:

  1. <httpModules> 
  2. <add name="ModuleRewriter" type="URLRewriter.ModuleRewriter, URLRewriter" /> 
  3. httpModules> 
  4.  

  
然后就是进行配置了(注:强烈建议使用configPath属性将配置提取成额外的文件,便于管理):

  1. <configSections> 
  2. <section name="RewriterConfig" 
  3. type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" /> 
  4. configSections> 
  5. <RewriterConfig> 
  6. <Rules> 
  7. <RewriterRule> 
  8. <LookFor>'/tag/([\w]+)/LookFor> 
  9. <SendTo>'/Tags.aspx?Tag=$1SendTo> 
  10. RewriterRule> 
  11. Rules> 
  12. RewriterConfig> 

  正则表达式是一个非常了不得的东西,能匹配,能捕获  。在上面的例子中,我们把符合LookFor条件的“/tag/xxx”重新定位到 Tags.aspx页面上,并且将xxx作为Tag这个QueryString项的值,这样就能够在代码中通过 HttpContext.Request.QueryString["Tag"]来获得该值了  。

  URL Rewriter的功能对于大多数应用来说已经足够了,但是我总是不喜欢  。但如果非要问我不喜欢的原因,我也难说出个子丑寅卯来  。可能仅仅是这个配置方式的问题吧  。在使用 URL Rewriter时,配置段往往会非常长,每个配置项需要从共4 行代码,一个规模不大的项目都很容易出现上百行的配置  。“这也太XML了”,我想,为什么不用XML Attribute呢?这样每个配置项就能缩短为1行了——不过,这是ASP.NET题外话  。

  所以如果我目前要做URL Rewrite,往往用的是Intelligencia出品的开源组件Url Rewriter.NET  。虽然这个名字和前一个非常相似,但是功能却远超前者  。该组件在使用上和URL Rewriter比较接近(其实似乎所有的URL Rewrite组件都差不多),我们要做的也只是配置:

  1. <configSections> 
  2. <section name="rewriter" 
  3. type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler,  
  4. Intelligencia.UrlRewriter" /> 
  5. configSections> 
  6. <rewriter> 
  7. <rewrite url="^/User/(\d+)$" to="'/User.aspx?id=$1" processing="stop" /> 
  8. <rewrite url="^/User/(\w+)$" to="'/User.aspx?name=$1" processing="stop" /> 
  9. rewriter> 
  10. <system.web> 
  11. <httpModules> 
  12. <add name="UrlRewriter" 
  13. type="Intelligencia.UrlRewriter.RewriterHttpModule,  
  14. Intelligencia.UrlRewriter" /> 
  15. httpModules> 
  16. system.web>