ASP.NET 4.0 WebForms路由

3
我是一名有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:

我有一个现有的网站,希望将其转换为使用路由。在阅读Scott Guthrie在此处发布的文章之后,我构建了一个有效的示例,适用于大多数情况。然而,由于现有网站上的并非所有页面都符合特定模式,因此我需要检查数据库以确定使用哪个路由(目标.aspx页面)。

例如,大多数页面都像这样:

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

没问题 - 我可以很容易地将它们路由到'people'目录下的'view_person.aspx'页面。

但有些页面是这样的:

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

这需要检查数据库以确定是将路由到view_category.aspx页面还是view_product.aspx页面。而我卡在这里了。我是否应该创建一个IRouteHandler来检查数据库并返回路由?还是有更好的方法?我找到的唯一符合要求的代码是这个问题的答案
提前致谢。
3个回答

0

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

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

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

明白,但在这种情况下这不是一个选项。该网站有大量的反向链接,我们不想冒失失去流量和收入。 - Eyeball

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

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


0

对于任何陷入同样困境的人,我最终改编了来自this answer的代码,以检查数据库并返回正确的ASPX页面。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接