2015-02-23 110 views
0

我已經在webforms應用程序中的Global.asax中的RegisterRoutes()中寫入了以下內容。 我有一個名爲CacheInfo.xml的xml文件,用於存儲緩存頁面的詳細信息。默認頁面在xml中有一個名爲EnDefaultPage的條目,其中包含兩個子節點。 子節點LastUpdationTimeStamp存儲默認頁面的緩存的最後更新時間戳記(以秒爲單位的unix時間戳記)。Asp.net路由不能正常工作

子節點ExpiryTimestamp存儲緩存將過期的時間戳。所以如果到期時間戳大於lastupdation時間戳,緩存中的文件將被加載(Default.html)。目前該腳本正在工作,但是它不是路由到Default.html,雖然定義路由的條件塊正在執行。我無法找到問題背後的確切原因。任何人都可以給我一個修復建議。所有其他路由都可以正常工作。 我的代碼附在下面。

ublic void RegisterRoutes(RouteCollection routes) 
    { 

     string relPath = "~/CacheInfo.xml"; 
     string absPath = Server.MapPath(relPath); 


     XmlDocument xdoc = new XmlDocument();//xml doc used for xml parsing 

     xdoc.Load(
      absPath 
      );//loading XML in xml doc 

     string nodeName="", nodeVal="",upStamp="0",expiry="0"; 
     int iUpStamp,iExpiry; 
     upStamp = xdoc.GetElementsByTagName("EnDefaultPage")[0].SelectSingleNode("LastUpdationTimeStamp").InnerText; 
     expiry = xdoc.GetElementsByTagName("EnDefaultPage")[0].SelectSingleNode("ExpiryTimeStamp").InnerText; 

     iUpStamp = Convert.ToInt32(upStamp); 
     iExpiry = Convert.ToInt32(expiry); 

     if(!String.IsNullOrEmpty(upStamp)) { 
      if (iExpiry > iUpStamp) 
      { 
       System.Diagnostics.Debug.WriteLine("stamp is " + upStamp + " Expiry is " + expiry); 
       // routes.MapPageRoute("EnHome1", "", "~/en/DefaultCache.aspx"); 
       routes.MapPageRoute("EHome", "en/", "~/en/Default.html"); 
       //this routing is not working 
      } 
      else 
      { 
      } 
     } 

     routes.MapPageRoute("GArticle", "Gallery/{slug}", "~/Gallery/Article.aspx"); 


     routes.MapPageRoute("GCategory", "Gallery/Categories/{slug}", "~/Gallery/Categories.aspx"); 

     routes.MapPageRoute("GSlideShow", "Gallery/{slug}/{id}", "~/Gallery/SlideShow.aspx"); 

     routes.MapPageRoute("Article", "en/{slug}", "~/english/Article.aspx"); 


     routes.MapPageRoute("Category", "en/Categories/{slug}", "~/english/Categories.aspx"); 
     routes.MapPageRoute("enFeed", "en/category/english/{slug}/feed", "~/en/feed.aspx"); 

     routes.MapPageRoute("teFeed", "te/category/telugu/{slug}/feed", "~/te/feed.aspx"); 

     routes.MapPageRoute("Tags", "en/Tags/{tag}", "~/english/Tags.aspx"); 



     routes.MapPageRoute("tArticleHtml", "te/{slug}.html", "~/telugu/Article.aspx"); 

     routes.MapPageRoute("tArticle", "te/{slug}", "~/telugu/Article.aspx"); 


     routes.MapPageRoute("tCategoryHtml", "te/Categories/{slug}.html", "~/telugu/Categories.aspx"); 
     routes.MapPageRoute("tCategory", "te/Categories/{slug}", "~/telugu/Categories.aspx"); 

     routes.MapPageRoute("tTagsHtml", "te/Tags/{tag}.html", "~/telugu/Tags.aspx"); 

     routes.MapPageRoute("tTags", "te/Tags/{tag}", "~/telugu/Tags.aspx"); 


    } 
} 

回答

1

如果我正確閱讀您的意圖,您希望用戶在任何時候訪問過期時都被定向到默認值。如果是這樣,你不能從這裏到達那裏。

RegisterRoutes用於在應用程序啓動時註冊路由。最後3個字是關於爲什麼某些邏輯在應用程序稍後不工作的原因。

現在到您的RegisterRoutes。這是邏輯。

  1. 獲取到期日
  2. 獲取時間戳
  3. 如果到期日比最後更新,應用程序啓動時,路由用戶默認值,如果在啓動

真正意味着」更大確定是否將每個可以過期的頁面路由到默認值,每次「然後你有正確的邏輯並且它按預期工作。你問這個問題的事實說這不是你的意圖。您希望通過頁面訪問權限對頁面訪問做出決定。如果我是正確的,你不能在RegisterRoutes中完成。你將不得不在其他地方實施「緩存邏輯」。

我的建議,而不是手工構建,是研究處理緩存的軟件。

+0

謝謝......但是routes.MapPageRoute(「EHome」,「en /」,「〜/ en/Default.html」)背後的原因是什麼?不工作?任何解決方案 – 2015-02-23 18:09:35

+1

這是您的意圖嗎? 1.啓動Web服務器2.確定當前所有過期頁面(在啓動時)是否轉到default.htm。如果你需要逐個案例(現在已過期,而不是開始應用),那麼你不能這樣做。 RegisterRoutes旨在設置路線的「字典」,可以說是在啓動時。它不用於運行時條件邏輯。從開始的角度來看,它很可能是完美的,但是您希望運行時確定。如果你這樣做,我會建議看看OutputCache,這在RegsiterRoutes中沒有使用。 – 2015-02-23 18:15:57

+1

注意:如果您需要自定義緩存,您仍然無法在RegisterRoutes中爲運行時實現它。 – 2015-02-23 18:16:25