asp.net URL重寫續

來源:互聯網
上載者:User
昨天寫了個URL重寫,因為在重寫後的URL裡有一個小小的Bug的,就是在Post資料時會把原URL裡的地址變成GET。

比如原地址URL為:http://localhost/Test/Default.aspx
重寫後的URL:http://localhost/Test/2004/12/News.aspx
而在Default.aspx檔案裡有Post資料(如Post文本)。那麼這時重寫後的URL就會變為:http://localhost/Test/2004/12/News.aspx?ID=12

顯然,這不是我們想要的URL也不是標準的。

其實,有細讀過在MS上的MSDN裡的這篇文章的朋友都知道,裡面已經有講述了且問題也已經解決了的。
http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx

可能上面連結的文檔相對較長,有朋友讀完到URL重寫後就沒再往下看了。在文章下頭裡有細說明,怎麼個把Form的Action清除掉。這裡我所插一句的是:在ASP.net的頁面WebForm裡,一個頁面只能有一個Form,但同時,這個Form的Action是不可變的(即只能Post資料回本頁面)。如需要變動,則要自己寫一個Form控制項,此控制項繼承System.Web.UI.HtmlControls.HtmlForm介面。

這裡是URLRewriter的源碼下載:
http://upserver2.ys168.com/ys168up/D1/ys1.aspx?f=MSDNURLRewriting.msiy71z73f8b3f8b4b0f8z95b6b1f9b5f9f5f9b1f8b0b2b1f6e09e15e05e24b1b0f2b0f9f9b1f6b7f8b1z

在這個源碼中,找到URLRewriter.dll和ActionlessForm.dll這兩個DLL檔案。其實一整個源碼就只有這兩個檔案有用的。
第一個不用多說了,前文已經說了怎麼用這個DLL。對於ActionlessForm.dll這個就是一個控制項,用法也很簡單:

首先把ActionlessForm.dll拷入你的項目中的bin目錄,然後在你的VS.net的項目中引用這個dll。再在你原有的(即沒重寫的).aspx頁面中

第一步:把這句加於代碼頂部:
<%@ Register TagPrefix="skm" Namespace="ActionlessForm" Assembly="ActionlessForm" %>
第二步:
<form id="Form1" method="post" runat="server">和</form>
替換成:
<skm:Form id="Form1" method="post" runat="server">和</skm:Form>

OK,現在你可以再運行程式試試了。
----------

附:為什麼URL就會變為:http://localhost/Test/2004/12/News.aspx?ID=12
其實很簡單,因為在web.config中有這樣的一句:
<SendTo>~/Default.aspx?ID=$2</SendTo>
在沒有替換form之前,你查看頁面的源碼就可以看到,你的form的Action是到(以上面的例子):Default.aspx?ID=12
即.aspx頁面最後產生的HTML是:
<form id="Form1" name="Form1" method="post" action="Default.aspx?ID=12"></form>

還有,如果想用URL重寫後的格式為以目錄形式即不用加Default.aspx:
http://localhost/Test/2004/12
則要建立相應的目錄和檔案Default.aspx。
如上例子:http://localhost/Test/2004/12
則要建立2004目錄和在此目錄下建立12目錄,再在12目錄下建立Default.aspx檔案。檔案內容可為空白。

至於為什麼,是因為IIS如沒有找到目錄或檔案時會報錯。

http://community.csdn.net/Expert/TopicView1.asp?id=4218777
--------------
附:URL重寫
http://www.cnblogs.com/HD/archive/2005/06/20/177633.html
http://www.cnblogs.com/HD/archive/2005/06/21/178367.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.