mvc 做偽靜態另外一個方法


上一篇文章介紹如何做偽靜態如下:

    routes.MapRoute(//兩個參數不帶動作
            "TwoparameterNoAction",
            "{controller}/{CurrentID}/{ClassID}.html",
            new { controller = @"[a-zA-Z]", action = "Index", CurrentID = @"[\d]{0,3}", ClassID =UrlParameter.Optional }
            );

 

這樣就能匹配:http://www.163.com/Home/1/2.html  但無法匹配 http://www.163.com/home/1.html 雖然ClassID是可選的 但還是無發匹配

這個時候很多同學都是重寫多個路由來完成,其實不必如此,我們可以利用路由的通配符{*catchall} * 表示多出所有的段落都可以用catchall 來獲取。

既然我們是做偽靜態使URL個更加友好。我們完全可以這樣做:

routes.MapRoute(//兩個參數不帶動作 多余的參數從catchall 獲取
            "TwoparameterNoAction",
            "{controller}/{CurrentID}/{*catchall}",
            new { controller = @"[a-zA-Z]", action = "Index", CurrentID = @"[\d]{0,3}"}
            );

http://www.163.com/home/1.html  那CurrentID就等於int.Parse(controlerContext.RouteData.Values["CurrentID"].ToString().Replace(".html",""))
http://www.163.com/home/1/2.html  那CurrentID就等於1而classid 就等於catchall=2.html 我同樣int.Parse(controlerContext.RouteData.Values["catchall"].ToString().Replace(".html",""))

呵呵 這樣,到此大家就知道了這個.HTML 也被當參數來用了,哈哈 同樣實現了“偽靜態”,對於我現在所開發的中小型網站綽綽有余。

那有的同學就會每一個頁面都要獲取參數怎么辦?很簡單嘛,模型綁定下,在需要控制器的動作 傳遞模型就可以。這點 我就不細說了。

那再多的參數我們都不怕了 哈哈,1/2/3/4/5/6/7/8/9.html 都可以實現哦,但前提就是必須約定開發。

希望大牛路過的時候 提供更好的方法 ,希望能拋磚引玉!


免責聲明!

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



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