<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      ASP.NET MVC3關(guān)于生成純靜態(tài)后如何不再走路由直接訪問靜態(tài)頁面

      問題描述:高訪問量類型的電子商務(wù)網(wǎng)站,需要將一些不是經(jīng)常變化的頁面生成靜態(tài)頁面,然后普通用戶就可以直接訪問這些靜態(tài)頁面而不用再訪問需要連接數(shù)據(jù)庫的動態(tài)頁面。那么ASP.NET MVC3中如何做到這一點(diǎn)呢?

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

      ASP.NET生命周期 (2)

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

      image

      注意圖中標(biāo)示的紅色部分就是我們要實(shí)現(xiàn)的部分,實(shí)現(xiàn)如下:

      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));//直接走靜態(tài)頁面
      //此處可以加入緩存,條件也可以根據(jù)需要來自己定義
                      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中加入以下代碼,才會運(yùn)行自定義的管道處理類

         1:  <httpModules>
         2:        <add name="MvcTest.MyHandler" type="MvcTest.MyHandler"/>
         3:      </httpModules>

      運(yùn)行一下自己的代碼,看看效果你就全明白了!

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

         1:  private void Application_BeginRequest(Object source,
         2:          EventArgs e)
         3:          {
         4:              // Create HttpApplication and HttpContext objects to access
         5:              // request and response properties.
         6:              HttpApplication application = (HttpApplication)source;
         7:              HttpContext context = application.Context;
         8:              string filePath = context.Request.FilePath;
         9:              string fileExtension =
        10:                  VirtualPathUtility.GetExtension(filePath);
        11:              if (fileExtension.Equals(".html"))
        12:              {
        13:                  //判斷緩存是否存在,不存在加入緩存,調(diào)用生成靜態(tài)的類和方法
        14:                  //產(chǎn)品過期,移除靜態(tài)文件,302重定向
        15:                  if (System.IO.File.Exists(context.Server.MapPath(filePath)))
        16:                  {
        17:                      context.Response.WriteFile(context.Server.MapPath(filePath));
        18:                      context.Response.End();
        19:                  }
        20:                  
        21:                  
        22:              }
      思路大體如此。
      posted @ 2011-12-21 13:32  wxj200589  閱讀(5857)  評論(10)    收藏  舉報
      主站蜘蛛池模板: 日本亚洲一区二区精品久久| 亚洲乱码一二三四区| 国产成人午夜福利院| 日韩成av在线免费观看| 亚洲欧美在线综合一区二区三区| 久久ww精品w免费人成| 国产伦精品一区二区亚洲| 东兰县| 午夜福利一区二区在线看| 深夜释放自己在线观看| 5D肉蒲团之性战奶水欧美| 国产乱老熟女乱老熟女视频| 精品无码三级在线观看视频| 蜜臀av久久国产午夜福利软件| 亚洲综合91社区精品福利| 亚洲天堂网中文在线资源| 在线中文字幕国产精品| 人妻丝袜无码专区视频网站| 亚洲高清aⅴ日本欧美视频| 又爽又黄又无遮挡的视频| 亚洲精品综合久中文字幕| 亚洲综合伊人久久大杳蕉| 久久精品熟女亚洲av麻| 日韩av片无码一区二区不卡| 日本阿v片在线播放免费| 天堂网亚洲综合在线| 欧美肥老太wbwbwbb| 囯产精品久久久久久久久久妞妞| 日本a在线播放| 综合在线 亚洲 成人 欧美 | 亚洲免费人成在线视频观看| 国产三级精品三级在线观看| 欧美熟妇xxxxx欧美老妇不卡| 欧美综合自拍亚洲综合图| 亚洲黄色成人网在线观看| 开心一区二区三区激情| 久久精品无码鲁网中文电影| 亚洲色大成网站www在线| 国产又色又爽又黄的在线观看| 狠狠躁夜夜躁人人爽天天5| 亚洲 欧美 中文 日韩aⅴ|