2015-02-23 4 views
0

Я написал следующее в моем RegisterRoutes() в Global.asax в приложении webforms. У меня есть xml-файл с именем CacheInfo.xml, в котором хранятся подробности кэшированных страниц. Страница по умолчанию имеет запись в xml под названием EnDefaultPage, которая содержит два дочерних узла. В дочернем узле LastUpdationTimeStamp хранится последняя временная отметка времени восстановления (временная метка unix в секундах) кэша для страницы по умолчанию.Маршрутизация Asp.net не работает должным образом

Детский узел ExpiryTimestamp хранит метку времени, в которой истек срок действия кэша. Так, если метка времени истечения больше, чем временная метка последнего обновления, будет загружен файл из кэша (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 слова являются подсказкой, почему некоторая логика не будет работать позже в приложении.

Теперь на ваш регистрационный номер. Вот логика.

  1. Дата Получить истечения
  2. Get временной метки
  3. Если срок годности больше, чем последнее обновление, при запуске приложения, маршрут пользователь по умолчанию

Если вы действительно серединой «при запуске определить, следует ли маршрутизировать каждую страницу, которая может быть истекло по умолчанию, каждый раз «тогда у вас есть правильная логика и она работает как ожидалось. Тот факт, что вы задали вопрос, говорит, что это не ваше намерение. Вы хотите принять решение о доступе к странице на основе доступа к странице. Если я прав, вы не можете сделать это в RegisterRoutes. Вам придется реализовать «логику кэширования» в другом месте.

Мое предложение, а не создание этого вручную, - это поиск программного обеспечения, которое обрабатывает кеширование.

+0

Спасибо ... Но в чем причина маршрутов. MapPageRoute («EHome», «en /», «~/en/Default.html»); не работает? Любое решение –

+1

Это ваше намерение? 1. Запустите веб-сервер 2. Определите, будут ли все текущие истекшие страницы (при запуске) перейти на default.htm. Если вы хотите его в каждом конкретном случае (истек он сейчас, а не при запуске приложения), то вы не можете сделать это таким образом. RegisterRoutes предназначен для настройки «словаря» маршрутов, так сказать, при запуске. Он не используется для условной логики времени исполнения. Скорее всего, он работает отлично, с самого начала, но вы хотите определить время исполнения. Если вы это сделаете, я бы предложил посмотреть на что-то вроде OutputCache, который не используется в RegsiterRoutes. –

+1

ПРИМЕЧАНИЕ. Если вам требуется настраиваемое кэширование, вы все равно не сможете реализовать его во время выполнения в RegisterRoutes. –

Смежные вопросы