MVC實現偽靜態


1  什么是偽靜態?

現在很多門戶網站或者各大電商平台的網站的鏈接最后都是.htm或者.htm結尾,那么他們的網頁真的是靜態的html嗎?拿京東來說,有無數個頁面都都Html,在商品每時每刻都可能被更新的情況下,那是不是要有專門的人員來修改html靜態頁面呢,可想而知當然不是,不管是javaweb還是asp.net的動態頁面絕對不是以.html結尾的。

2 為什么要實現偽靜態?

那么我們為什么要注重url的結尾呢,那就是SEO(Search Engine Optimization)--搜索引擎優化,雖然現在主流的搜索引擎都開始支持動態的url,可是我們的網站為了排名盡量靠前,我們還是要盡量符合搜索引擎的規則。

3  MVC如何實現偽靜態?

下面進入主題,我們大家都知道asp.net MVC的URL默認的都是 域名+控制器名稱+Action名稱,有的人說,直接在action后面加一個.html就好了,好我們就這么做了
[csharp]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
  1. <span style="white-space:pre">    </span>public static void RegisterRoutes(RouteCollection routes)  
  2.         {  
  3.             routes.IgnoreRoute("{resource}.axd/{*pathInfo}");  
  4.   
  5.             routes.MapRoute(  
  6.                name: "Default",  
  7.                url: "{controller}/{action}.html",  
  8.                defaults: new { controller = "Home", action = "Index" }  
  9.            );  
  10.         }  
可是不是這么簡單,瀏覽器意外的報了 http 404錯誤
最后分析得知,可能是ASP.NET認為html文件是靜態文件,沒有必要進入我們的路由系統,直接指向了物理路徑,所以報了一個404錯誤,那么我們怎么來解決這個問題呢?
一開始我嘗試讓所有的后綴名都進入asp.net的管道,好我們在webconfig的 system.webServer配置節下的modules節點添加runAllManagedModulesForAllRequests="true",
就是讓所有的請求都經過httpModules,大功告成
 

到這里是不是真的結束了,有沒有同學想到,本來物理文件是不應該經過asp.net管道的,如果所有的圖片和CSS,JS文件都經過ASP.NET管道,那我們的引用程序的性能會受到很大的影響,最后我想到我們只讓后綴名是.html的文件進入管道,如果有其他真實存着的.html結尾的物理文件存着,我們可以讓路由忽略他(怎么做我就不說了),
 
 
這樣,我們的應用程序就可以實現偽靜態了,我們總是要比別人想的多一點,用最好的方法完成同樣的功能
 
 


免責聲明!

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



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