隨筆-7  評論-24  文章-102  trackbacks-0

          原文地址:
          技巧/訣竅:在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屬性。


           
          正確地處理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版的文件
          posted on 2010-05-11 10:52 黃小二 閱讀(355) 評論(0)  編輯  收藏 所屬分類: ASP.NET
          主站蜘蛛池模板: 丹凤县| 工布江达县| 惠来县| 天台县| 株洲市| 津南区| 准格尔旗| 应用必备| 边坝县| 全椒县| 平乐县| 大宁县| 济阳县| 玛曲县| 时尚| 宁都县| 楚雄市| 长沙县| 苗栗市| 肥东县| 潜江市| 监利县| 会东县| 张掖市| 新乐市| 台中市| 潼关县| 玛纳斯县| 乌拉特中旗| 茂名市| 庆安县| 尚义县| 平昌县| 弥勒县| 建湖县| 疏附县| 益阳市| 闻喜县| 云浮市| 西乌珠穆沁旗| 佛教|