2010-01-20 80 views
3

我正在开发一个具有模块化结构的网站。 网址的每个部分都会显示一个内容项目。 例如url:www.mysite.com/blogs/programming/2010/01/asp.net mvc动态/相对路由

根项目是'area'类型的'blogs'。它有一个'博客'类型的子项目'编程'。

现在有“2010/01”留下的网址。 最后有效(路由)项目 '编程' 是一个博客,所以我需要映射 '2010/01' 行动

BlogController.Date(INT blogid,年整型,诠释?月,诠释?天)

每个控制器来自一个模块(单独的DLL),其中注册一些项目类型(博客注册类型的“博客”(路由)和“后”(不可路由)。“博客”可以有型“后”的孩子)。 当检测到url的上一个有效(可路由)项时,逻辑知道要查找哪个组件和控制器。现在我需要一种方法来使用正确的参数调用正确的操作。

类型“博客”的项目部分航线

 
{year}/ 
{year}/{month} 
{year}/{month}/{day} 
feed/ 
category/{category-name}/ 
tag/{tag-name}/ 
search/{*phrase} 
{*post-name} 

任何建议这将是一个简单的方式做路由?

回答

1

为了解决这个动作参数签名的问题,我个人会创建一个新的Model类“BlogModel”,且仅作为您的单一参数。这样,你将拥有一致的动作参数签名。但是,这需要更多工作,因为您需要创建自定义ModelBinder对象“BlogModelBinder”并将其注册到ModelBinderFactory(或MVC3 DependencyResolver中)。在“BlogModelBinder”中,您只需查找RouteData的参数和值,并将其绑定到“BlogModel”中的相应字段。

从我个人的经验,我不认为有一个简单的方法来注册你的路由:你仍然要路线网址分别注册到一个具体的行动。除非有人有效地注册路线网址,否则在知道我们都必须用管道代码弄脏我们的手时,您可以感到安慰。