由於需要我們經常會想將動態的頁面做成偽靜態的,或者在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&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中用&分隔,在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