Я написал следующее в моем 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");
}
}
Спасибо ... Но в чем причина маршрутов. MapPageRoute («EHome», «en /», «~/en/Default.html»); не работает? Любое решение –
Это ваше намерение? 1. Запустите веб-сервер 2. Определите, будут ли все текущие истекшие страницы (при запуске) перейти на default.htm. Если вы хотите его в каждом конкретном случае (истек он сейчас, а не при запуске приложения), то вы не можете сделать это таким образом. RegisterRoutes предназначен для настройки «словаря» маршрутов, так сказать, при запуске. Он не используется для условной логики времени исполнения. Скорее всего, он работает отлично, с самого начала, но вы хотите определить время исполнения. Если вы это сделаете, я бы предложил посмотреть на что-то вроде OutputCache, который не используется в RegsiterRoutes. –
ПРИМЕЧАНИЕ. Если вам требуется настраиваемое кэширование, вы все равно не сможете реализовать его во время выполнения в RegisterRoutes. –