asp.net mvc动态/相对路由

时间:2010-01-20 12:10:10

标签: asp.net-mvc asp.net-mvc-routing

我正在开发一个具有模块化结构的网站。 URL的每个片段都呈现内容项。 例如url:www.mysite.com/blogs/programming/2010/01 /

根项目是“区域”类型的“博客”。它有一个'blog'类型的子程序“编程”。

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

BlogController.Date(int blogid,int year,int?month,int?day)

每个控制器来自一个模块(单独的dll),它注册一些项目类型(博客寄存器类型'博客'(可路由)和'发布'(不可路由)。'博客'可以有'post'类型的子项。 当检测到url的最后一个有效(可路由)项时,逻辑知道要查找哪个程序集和控制器。现在我需要一种方法来使用正确的参数调用正确的操作。

“博客”类型项目的某些路线

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

任何建议什么是简单的路由方式?

1 个答案:

答案 0 :(得分:1)

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

根据我的个人经验,我认为没有一种简单的方法可以注册您的路线:您仍然需要单独注册路线网址以进行特定操作。除非有人有一种有效的方式来注册路线网址,否则你可以安心地知道我们都必须弄脏管道代码。