Asp.net路由无法正常工作

时间:2015-02-23 17:48:52

标签: asp.net routing

我在webforms应用程序的Global.asax中的RegisterRoutes()内写了以下内容。 我有一个名为CacheInfo.xml的xml文件,用于存储缓存页面的详细信息。默认页面在xml中有一个名为EnDefaultPage的条目,它包含两个子节点。 子节点LastUpdationTimeStamp存储默认页面缓存的上次更新时间戳(unix timestamp,以秒为单位)。

子节点ExpiryTimestamp存储缓存将到期的时间戳。如果到期时间戳大于lastupdation时间戳,则将加载来自Cache的文件(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 个答案:

答案 0 :(得分:1)

如果我正确地阅读了您的意图,您希望用户在其访问过期时被定向到默认值。如果是这样,你就无法从这里到达那里。

RegisterRoutes用于在应用程序启动时注册路由。最后3个字是关于为什么某些逻辑在以后的应用程序中不起作用的线索。

现在登录您的RegisterRoutes。这是逻辑。

  1. 获取到期日期
  2. 获取时间戳
  3. 如果到期日期大于上次更新,则在应用程序启动时将用户路由到默认值
  4. 如果你真的的意思是“在启动时确定是否将每个可以过期的页面路由到默认值,每次都”,那么你就拥有了正确的逻辑并且它按预期工作。你问这个问题的事实说这不是你的意图。您希望按页面访问权限对页面访问做出决策。如果我是正确的,你不能在RegisterRoutes中做到这一点。您必须在其他地方实施“缓存逻辑”。

    我的建议是,而不是手工构建,而是研究处理缓存的软件。