[笔记] 技巧/诀窍:在ASP.NET中重写URL


原文地址:
技巧/诀窍:在ASP.NET中重写URL http://blog.joycode.com/scottgu/archive/2007/03/01/94004.aspx

方法一:使用Request.PathInfo 参数而不是查询字符串
方法二:使用HttpModule实现URL重写
方法三:在IIS7中使用HttpModule 实现无扩展名的URL重写
方法四:在IIS5和IIS6中使用 ISAPIRewrite 来实现无扩展名的URL重写 
在URL重写里处理ASP.NET PostBack
正确地处理CSS和图像引用


例程的URL重写场景
http://www.store.com/products.aspx?category=books
http://www.store.com/products.aspx?category=DVDs
http://www.store.com/products.aspx?category=CDs


方法一:使用Request.PathInfo 参数而不是查询字符串


http://www.store.com/products.aspx/Books
http://www.store.com/products.aspx/DVDs
http://www.store.com/products.aspx/CDs


 

方法二:使用HttpModule实现URL重写


http://www.store.com/products/Books.aspx
http://www.store.com/products/DVDs.aspx
http://www.store.com/products/CDs.aspx


 

方法三:在IIS7中使用HttpModule 实现无扩展名的URL重写


http://www.store.com/products/Books
http://www.store.com/products/DVDs
http://www.store.com/products/CDs       

      IIS 7.0使得处理这类情形容易之极。你现在可以在 IIS 请求管道的任何地方执行一个HttpModule,这意味着你可以使用上面的URLRewriter 模块来处理和重写无扩展名的URL(甚至是带有 .asp,.php,或 .jsp 扩展名的URL)。下面示范了你在IIS7中该如何配置:

<? xml version="1.0" encoding="UTF-8" ?>

< configuration >

  
< configSections >
    
< section  name ="rewriter"  
             requirePermission
="false"  
             type
="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter"   />
  
</ configSections >
  
  
< system .web >       
    
< httpModules >
      
< add  name ="UrlRewriter"  type ="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"   />
    
</ httpModules >     
  
</ system.web >

  
< system .webServer >
    
< modules  runAllManagedModulesForAllRequests ="true" >
      
< add  name ="UrlRewriter"  type ="Intelligencia.UrlRewriter.RewriterHttpModule"   />
    
</ modules >
    
< validation  validateIntegratedModeConfiguration ="false"   />
  
</ system.webServer >

  
< rewriter >
    
< rewrite  url ="~/products/(.+)"  to ="~/products.aspx?category=$1"   />
  
</ rewriter >
  
</ configuration >  



方法四:在IIS5和IIS6中使用 ISAPIRewrite 来实现无扩展名的URL重写





在URL重写里处理ASP.NET PostBack


      当使用URL重写时,会出现这样的问题,<form> 控件显示的URL不是原先请求的URL(譬如,/products/books),而是重写过后的URL(譬如,/products.aspx?category=books)。这意味着,当你做一个postback到服务器时,URL不再是你原先干净利落的那个了。       在ASP.NET 2.0中,有个比较干净的诀窍你可以用来重写<form>控件的action属性。具体地来说,你可利用新的ASP.NET 2.0控件适配器扩展架构来定制控件的输出,用你提供的值来覆盖action属性的值。这不要求在你的.aspx页面里做任何编码改动,而只要在你的/app_browsers文件夹里添加一个.browser文件,注册使用一个控件适配类即可输出新的action属性。
[笔记] 技巧/诀窍:在ASP.NET中重写URL



 
正确地处理CSS和图像引用

      不少人在第一次使用URL重写时,有时会遇上一个疑难杂症,就是他们发现他们的图像和CSS样式表引用有时会停止工作。这是因为他们在HTML网页里有对这些文件的相对引用,当你开始在应用里重写URL时,你需要意识到浏览器经常会在不同的逻辑层次结构层上(logical hierarchy levels)请求文件,而不是实际存储在服务器上的东西。

      譬如,如果我们上面的/products.aspx网页对.aspx 网页里的logo.jpg有一个相对引用,但是通过 /products/books.aspx这个URL来请求的,那么浏览器在显示网页时,将会发出一个对/products/logo.jpg的请求,而不是对/logo.jpg的请求。要正确地引用这个文件,确认你用根目录限定了(root qualify)CSS和图像引用(“/style.css”,而不是 “style.css”)。对于ASP.NET控件,你也可以使用“~”句法从你应用的根目录来引用文件(譬如,<asp:image imageurl="~/images/logo.jpg" runat="server"/>) 。

  附:/Files/kiant/2010.05/UrlRewrite_HttpModule1.FormRewriter.cs.zip  附加CS版的文件

你可能感兴趣的:(asp.net)