一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - ASP.NET MVC3關于生成純靜態后如何不再走路由直接訪問靜態頁面

ASP.NET MVC3關于生成純靜態后如何不再走路由直接訪問靜態頁面

2019-09-25 10:28asp.net教程網 ASP.NET教程

高訪問量類型的電子商務網站,需要將一些不是經常變化的頁面生成靜態頁面,然后普通用戶就可以直接訪問這些靜態頁面而不用再訪問需要連接數據庫的動態頁面。那么ASP.NET MVC3中如何做到這一點呢

解決這個問題,我們需要先了解ASP.NET應用程序的生命周期,先看下面作者整理的一張圖片:

ASP.NET MVC3關于生成純靜態后如何不再走路由直接訪問靜態頁面

從圖中我們可以清楚的看到:通用IIS訪問應用程序時,每次的單個頁面URL訪問時,都會先經過HttpApplication 管線處理請求,走過BeginRequest 事件之后才會去走路由訪問具體的Controller和Action,最后結束的時候會請求EndRequest事件。下面用一張圖來表示這個順序:

ASP.NET MVC3關于生成純靜態后如何不再走路由直接訪問靜態頁面

注意圖中標示的紅色部分就是我們要實現的部分,實現如下:
1 新建MyHandler.cs 

復制代碼代碼如下:

public class MyHandler:IHttpModule 

public void Init(HttpApplication application) 

application.BeginRequest += 
(new EventHandler(this.Application_BeginRequest)); 
application.EndRequest += 
(new EventHandler(this.Application_EndRequest)); 

private void Application_BeginRequest(Object source, 
EventArgs e) 

// Create HttpApplication and HttpContext objects to access 
// request and response properties. 
HttpApplication application = (HttpApplication)source; 
HttpContext context = application.Context; 
string filePath = context.Request.FilePath; 
string fileExtension = 
VirtualPathUtility.GetExtension(filePath); 
if (fileExtension.Equals(".html")) 

context.Response.WriteFile(context.Server.MapPath(filePath));//直接走靜態頁面 
//此處可以加入緩存,條件也可以根據需要來自己定義 
context.Response.End(); 


private void Application_EndRequest(Object source, EventArgs e) 

HttpApplication application = (HttpApplication)source; 
HttpContext context = application.Context; 
string filePath = context.Request.FilePath; 
string fileExtension = 
VirtualPathUtility.GetExtension(filePath); 
if (fileExtension.Equals(".html")) 

context.Response.Write("<hr><h1><font color=red>" + 
"HelloWorldModule: End of Request</font></h1>"); 


public void Dispose() { } 


2. web.config中加入以下代碼,才會運行自定義的管道處理類 

復制代碼代碼如下:

<httpModules> 
<add name="MvcTest.MyHandler" type="MvcTest.MyHandler"/> 
</httpModules> 


運行一下自己的代碼,看看效果你就全明白了! 
補充:根據@小尾魚的提示,如果直接在自己的項目文件下生產了和URL中一樣的目錄文件,比如訪問:yourdomin.com/product/1.html,你的項目文件夾下真的存在product/1.html這個路徑,那么IIS會直接去請求這個靜態頁面,如果項目中使用了自定義的管道處理程序,那么這個靜態頁仍然會走我們的自定義管道處理程序,我們可以在這里通過緩存來實現要不要重新成長靜態頁或刪除過期產品的靜態頁,如果不使用此方法,只能去寫執行計劃,定時跑這些靜態文件了,修改Application_BeginRequest 

復制代碼代碼如下:

private void Application_BeginRequest(Object source, 
EventArgs e) 

// Create HttpApplication and HttpContext objects to access 
// request and response properties. 
HttpApplication application = (HttpApplication)source; 
HttpContext context = application.Context; 
string filePath = context.Request.FilePath; 
string fileExtension = 
VirtualPathUtility.GetExtension(filePath); 
if (fileExtension.Equals(".html")) 

//判斷緩存是否存在,不存在加入緩存,調用生成靜態的類和方法 
//產品過期,移除靜態文件,302重定向 
if (System.IO.File.Exists(context.Server.MapPath(filePath))) 

context.Response.WriteFile(context.Server.MapPath(filePath)); 
context.Response.End(); 


思路大體如此。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人精品一区二区三区 | 好大好长好紧爽免费 | 三年片韩国在线 | 四虎影音| xxx中国bbbwww| 99久久99热久久精品免费看 | 国产精品久久久久久岛国 | 男人j放进女人的p免费看视频 | 惩罚狠h调教灌满 | 美女奶口隐私免费视频网站 | 国内精品视频一区二区三区 | 亚洲欧美精品一区二区 | 青丝视频免费版在线看 | free性丰满hd性欧美人体 | 国产精品毛片无码 | 国产精品福利在线观看免费不卡 | 九九精品影院 | 亚洲福利一区二区三区 | 8x8x拔插| 亚洲AV 中文字幕 国产 欧美 | 羞羞一区二区三区四区片 | 调教全程肉动画片在线观看 | 欧美gayxxxx| h版小说 | 2020年国产精品午夜福利在线观看 | 亚洲区视频在线观看 | mm131亚洲精品久久 | 91精品天美精东蜜桃传媒免费 | 欧美日韩精品乱国产 | 免费一区在线 | 欧美日韩精品免费一区二区三区 | 午夜香蕉成视频人网站高清版 | 国产精品久久久久久久久免费 | 国产51社区精品视频资源 | 日本h片在线 | 欧美一卡2卡三卡4卡5卡免费观看 | 污污的动态图合集 | 国产精品99久久 | 欧美成人精品第一区二区三区 | 国产成人高清精品免费观看 | 无套暴躁白丝秘书 |