对于项目,我有从内容数据库中检索的动态页面。但是,某些页面需要一些额外的计算。所以,我认为我会为那些创建一个特定的控制器/视图,它们只会在它们存在时被击中,否则,我的动态路由会捕获它,并让内容控制器检索指定路径的数据库内容。 我希望我解释得对,但是我的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匹配的多个类型”错误。 但我想知道是否还有其他方法可以实现我在这里尝试做的事情? (优先路线) 我显然希望保持我的网址完全动态。
提前感谢。
答案 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路由创建约束,以检查指定的内容是否存在。