3

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

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

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 来检查数据库并返回路由?或者,还有更好的方法?我发现的唯一代码就是这个问题的答案

提前致谢。

4

3 回答 3

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 变量传递给响应脚本。

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

于 2010-05-17T22:19:28.070 回答
0

如果您不介意这样做,最干净的解决方案是:

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

在 ASP.NET MVC 中,这种情况的处理方式略有不同,方法是在根路由上指定默认控制器和操作方法。

于 2010-05-09T19:15:30.790 回答
0

对于陷入相同情况的任何人,我最终调整了此答案中的代码以检查数据库并返回正确的 ASPX 页面。

于 2010-05-18T13:12:56.600 回答