我正在开发一个具有模块化结构的网站。 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}
任何建议什么是简单的路由方式?
答案 0 :(得分:1)
要解决动作参数签名问题,我个人会创建一个新的Model类“BlogModel”,并将其作为您的单个参数。这样,您就拥有了一致的操作参数签名。但是,这需要更多的工作,因为您需要创建一个自定义的ModelBinder对象“BlogModelBinder”并将其注册到ModelBinderFactory(或在MVC3中的DependencyResolver)。在“BlogModelBinder”中,您只需查找RouteData的参数和值,并将其绑定到“BlogModel”中的相应字段。
根据我的个人经验,我认为没有一种简单的方法可以注册您的路线:您仍然需要单独注册路线网址以进行特定操作。除非有人有一种有效的方式来注册路线网址,否则你可以安心地知道我们都必须弄脏管道代码。