在 ASP.NET 中執行 URL 重寫的方法


  由於需要我們經常會想將動態的頁面做成偽靜態的,或者在get傳值的時候使其簡潔明了(實現“可刪節”的URL),這時我們需要用到URL重寫,微軟的MSDN上有詳細的原理和使用介紹。我這里就將一種簡單的使用方法和步驟寫下來。

  MSDN文章:http://msdn.microsoft.com/zh-cn/library/ms972974.aspx

 

  具體實現步驟(其中的一種實現方法):

  一、下載相關的DLL(ActionlessForm.dll和UrlRewriter.dll

    http://download.csdn.net/detail/yingwanghbx/4510059

  二、在項目中引用那兩個DLL文件

    右擊項目,點擊Add Reference,選擇Browse,然后選擇相應的DLL,點擊OK即可。

  三、添加browser文件

  1、右擊項目,點擊Add-New Item,選擇Browser File,取個有意義的名字。在生成的*.browser文件的browsers節點中添加如下代碼:

<!--URLRewriter-->
    <browser refID="Default">
      <controlAdapters>
        <adapter controlType="System.Web.UI.HtmlControls.HtmlForm"
               adapterType="URLRewriter.Form.FormRewriterControlAdapter"/>
      </controlAdapters>
    </browser>

  2、在配置文件web.config中system.web節點內添加httpModules

<!--URLRewriter
    type:HttpModule的標識號和類庫名稱
    name:取一個較為友好的名稱-->
    <httpModules>
      <add type="URLRewriter.RewriterModule, URLRewriter" name="RewriterModule"/>
    </httpModules>

  3、然后就是在configuration節點下添加(必須是第一個子節點):

<!--URLRewriter-->
  <configSections>
    <section name="CustomConfiguration" type="URLRewriter.Config.UrlsSection, URLRewriter"/>
  </configSections>
  <CustomConfiguration>
    <urls>
      <!--([\w]+)表示,1到n個字母或數字或下划線或漢字組成-->
      <add virtualUrl="~/Default/([\w]+)*" destinationUrl="~/Default.aspx?username=$1"/>
      <add virtualUrl="~/Default/([\w]+)*/([\w]+)*" destinationUrl="~/Default.aspx?newsTypeId=$1&amp;newsWhere=$2"/>
      <add virtualUrl="~/page/user/login" destinationUrl="~/page/user/login.aspx"/>
      <add virtualUrl="~/page/user/registe" destinationUrl="~/page/user/registe.aspx"/>
      <add virtualUrl="~/page/index" destinationUrl="~/page/index.aspx"/>
    </urls>
  </CustomConfiguration>

  如上,在不需要傳參的情況下,可以直接在virtualUrl里面寫要轉化地址,destinationUrl為真實地址。在需要傳參的情況下,用正則表達式代替,多個參數,在destinationUrl中用&amp分隔,在virtualUrl中用自己規定的符號代替,我是用的‘/’分隔的。

  4、測試,在Default的Page_Load中添加如下代碼

if (!string.IsNullOrEmpty(Request.Params["newsTypeId"]))
{
    string newsId = Request.Params["newsTypeId"].ToString();
    string newsWhere = Request.Params["newsWhere"].ToString();
    Response.Write("newsid:" + newsId + "<br/>newsWhere:" +newsWhere);
} 

結果如下:

  5、加入窗體回傳保持的組件:

  在你的這個頁面中加入:
<%@ Register TagPrefix="skm" Namespace="ActionlessForm" Assembly="ActionlessForm" %>
再把你的<Form...>改為:
<skm:Form id="你的表單名" method="post" runat="server">
.....
</skm:Form>

 

  6、在IIS7.5里配置

  請看他人博客,我就不寫了,主要是找到和網站相對的連接池,選擇framework 4.0經典模式

 

http://www.cnblogs.com/zhongweiv/archive/2011/10/29/UrlRewriter_IIS.html

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM