ASP.NET ASP 2 - 优先路由?

时间:2011-01-10 14:33:13

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

对于项目,我有从内容数据库中检索的动态页面。但是,某些页面需要一些额外的计算。所以,我认为我会为那些创建一个特定的控制器/视图,它们只会在它们存在时被击中,否则,我的动态路由会捕获它,并让内容控制器检索指定路径的数据库内容。 我希望我解释得对,但是我的Global.asax中的一些代码可以解释一下:

routes.MapRoute( // Default controller actions, when not found, fall back to next route?
                    "Default",                                              
                    "{controller}/{action}/{id}",                           
                    new { controller = "Home", action = "Index", id = "" }  
                );

routes.MapRoute( // Catch all other? (And try to find content for those)
                    "DefaultContentRoute",              
                    "{ContentCategory}/{Content}",                        
                    new { controller = "Content", action = "Index" },  
                );

这显然不起作用,因为当我为需要额外计算的内容添加控制器时,我得到“发现与控制器名为xxx匹配的多个类型”错误。 但我想知道是否还有其他方法可以实现我在这里尝试做的事情? (优先路线) 我显然希望保持我的网址完全动态。

提前感谢。

1 个答案:

答案 0 :(得分:1)

ASP.NET MVC将会混淆,因为任何URL都将匹配这两个路由。尝试制作一个更明确的,例如:

routes.MapRoute( // Catch all other? (And try to find content for those) 
                    "DefaultContentRoute",               
                    "Categories/{ContentCategory}/{Content}",                         
                    new { controller = "Content", action = "Index" },   
                ); 

routes.MapRoute( // Default controller actions, when not found, fall back to next route? 
                    "Default",                                               
                    "{controller}/{action}/{id}",                            
                    new { controller = "Home", action = "Index", id = "" }   
                ); 

这将确保任何内容都将通过默认路由,但URL中以“Categories”开头的内容除外。 替代方法可能是滥用路由约束,并为ContentController路由创建约束,以检查指定的内容是否存在。