我正在使用ASP.NET MVC 2,并希望优化我的路由。预期结果如下:
http://www.url.com/Sites/
http://www.url.com/Sites/Search/NY001
http://www.url.com/Sites/NY001
http://www.url.com/Sites/NY001/Photos
这个场景的问题是,在某种意义上,我希望根据URL位的内容对其进行不同的处理。可以想象,“ny001”是
特定部位
不是为了生活在
Sites
控制器。我当前的解决方案是为特定于站点的URL定义一个特殊的路由映射,并在
地点
在那之前单独控制。
// currently in place, works
routes.MapRoute("SiteList", "Sites", new { controller = "Sites", action = "Index" });
routes.MapRoute("SiteSearch", "Sites/Search/{searchString}", new { controller = "Sites", action = "Index", searchString = "" });
routes.MapRoute("SiteNotFound", "Sites/NotFound", new { controller = "Sites", action = "NotFound" });
// and so on...
routes.MapRoute("Site", "Sites/{siteId}/{action}", new { controller = "Sites", action = "Index", siteId = "" });
因为这是我的Web应用程序的核心组件之一,所以这些操作每天都在增长,而且列表变得有点笨拙。我希望能够将一长串具体行动路线提炼成一份声明,类似于:
routes.MapRoute("Sites", "Sites/{action}/{id}", new { controller = "Sites", action = "Index", id = UrlParameter.Optional });
问题是,在上面的示例中,路由框架无法区分这个新路由和特定于站点的路由,因此两者都是匹配的。我是否坚持要分别宣布每一项行动?我应该考虑使用正则表达式根据URL的内容进行区分吗?
提前谢谢,如果这个问题已经以不同的形式被问到,我会提前道歉。