2010-05-09 140 views
3

我有一个现有的网站,我想转换为使用路由,并在阅读Scott Guthrie's post here后,我构建了一个适用于大多数情况下的工作示例。但是,由于并非现有站点上的所有页面都与特定模式匹配,因此我需要检查数据库以确定要使用哪条路径(目标.aspx页面)。ASP.NET 4.0 webforms路由

例如,大多数网页是这样的:

http://www.mysite.com/people/person.html

这是好的 - 我可以很容易地使这些到view_person.aspx页,因为“人”的目录。

但是有些页面是这样的:

http://www.mysite.com/category_page.html http://www.mysite.com/product_page.html

这就需要检查数据库,看看是否路由到view_category.aspx页面或view_product.aspx页面。 这就是我卡住的地方。我是否创建一个IRouteHandler来检查数据库并返回路由?或者,还有更好的方法?我找到的唯一代码是the answer to this question

在此先感谢。

回答

0

对于任何陷入相同情况的人,我最终修改了this answer的代码来检查数据库并返回正确的ASPX页面。

0

如果你不介意的话,最干净的解决方案是:

http://www.mysite.com/pages/category_page.html 

在ASP.NET MVC,这种情况将被处理方式稍有不同,通过指定一个默认的控制器和方法根路线。

+0

理解,但在这种情况下它不是一种选择。该网站有大量的反向链接,我们不想冒失去流量和收入的风险。 – Ethan 2010-05-09 19:27:35

0

您的路由处理程序不检查数据库。它将所有请求发送给处理程序.aspx脚本。这是检查数据库的脚本。

我的注册路线看起来像......

private static void RegisterRoutes() 
    { 
     Route currRoute = new Route("{resource}.axd/{*pathInfo}", 
            new StopRoutingHandler()); 
     RouteTable.Routes.Add("IgnoreHandlers", currRoute); 

     currRoute = new Route("{urlname}", 
          new EPCRouteHandler("~/Default.aspx")); 
     currRoute.Defaults = new RouteValueDictionary {{"urlname", "index.html"}}; 
     RouteTable.Routes.Add("Default", currRoute); 
    } 

自定义处理程序,它不应该在ASP.Net 4.0是必要的,只是将URLNAME参数响应脚本作为一个URL变量。

现在响应脚本检查数据库的频率取决于数据库中数据的更改频率。例如,假设数据发生更改时,您可以轻松地缓存路径并使缓存失效。