2010-01-27 152 views
1

我期待生成一个MVC网站,该网站使用路由完全控制了网址结构。mvc.net动态网址

 routes.MapRoute(
      "BlogView",              // Route name 
      "view/{blogurl}",             // URL with parameters 
      new { controller = "view", action = "view", productLink = ""} // Parameter defaults 
     ); 

     routes.MapRoute(
      "ProductGrid",              // Route name 
      "category/{category}",             // URL with parameters 
      new { controller = "category", action = "Index", category = "" } // Parameter defaults 
     ); 

我现在都有以下网址;

www.myblog.com/view/first-post

www.myblog.com/view/another-post

www.myblog.com/category/code

www.myblog .com/category/example

前两个网址与详细视图相关,后两个网址与类别视图相关。

我有一个具有以下结构的数据库;我确保url(chrUrl)是一个唯一的键。 URL(idurl(INT), chrURL, chrAction, chrController )

我的计划是,它可以查找改写路由查找表,以便follwoing网址重定向至正确的观点和页面网站;

www.myblog.com/first-post

www.myblog.com/another-post

www.myblog.com/code

www.myblog.com/example

这可能吗?除了性能外,这是否有问题,以及我如何处理这个问题?

回答

1

由于您没有任何东西来区分视图和类别项目,我会考虑使用默认控制器来检查id是否在类别表中,并将控制权传递给View或Category控制器。

routes.MapRoute(
      "Root", // Route name 
      "/{id}", // URL with parameters 
      new { controller = "default", action = "redirect"} // Parameter defaults 
     ); 

但是,如果你能在你的类别的URL“/类别/”生活,那将是在后端更优雅的解决方案。

1

首先,我会提出一个你很满意的URL方案。 (似乎你已经有一个)

然后我会使用一个ControllerFactory负责实例化和 在右侧控制器上运行正确的操作。这与您在路由表中定义的任何路由无关 - 事实上,由于您希望您的网址为“数据库驱动”,因此它不会影响您的网址。您可以从您的Global.asax文件调用控制器工厂:

protected void Application_Start() 
{ 
    RegisterRoutes(RouteTable.Routes); 
    ControllerBuilder.Current.SetControllerFactory(new Controllers.ControllerFactory()); 
} 

然后在你的ControllerFactory的GetControllerType方法,您检查与

RequestContext.RouteData.Values.ContainsKey("keyname") 

URL来解决URL方案的用户呈现,并根据此数据库进行数据库查询。

如果你想更进一步,你的数据库也可以包含对控制器的引用来实例化,但这对你的情况是一种矫枉过正。作为一个快速注释,我们在一个解决方案中使用它,在这个解决方案中,为非开发人员提供创建模板而不涉及开发的能力非常重要 - 数据库持有的url方案,控制器和视图在该控制器上呈现。如果你想让事情更优雅,创建一个你的控制器继承的BaseController,并在那里设置ViewData中的东西,比如你的SEO标签(MetaDescription,Title等) - 看看这些来自你的数据库。

+0

这对2张桌子来说可能有点过分,但是当你不知道最终会用到多少桌子时,这听起来像是一种合理的方式。无论你走到哪里,我仍然会担心失去网站的hackability部分以及只有单一路径的唯一性问题。 – 2010-01-27 22:24:28