我想有2条类似于这些的路线:
routes.MapRoute("Detail", "guide/{urlname}", new { controller = "Application", action = "Detail" });
routes.MapRoute("Search", "guide/{keyword1}/{keyword2}", new { controller = "Guide", action = "Index", keyword1 = UrlParameter.Optional, keyword2 = UrlParameter.Optional });
因此,一个路由是详细页面,它根据 url 名称在数据库中查找对象,另一个路由是基于应用程序生成的关键字的搜索结果页面,两者共享相同的 url 根 ( /guide
)。这两个动作在不同的控制器中。可能的网址是:
/guide/evernote --> should route to the application detail page
/guide --> should route to search results without filter
/guide/iphone --> should route to iphone apps search results
/guide/iphone/medical --> should route to medical iphone apps search results
显然,像这样,第二个路由永远不会匹配一个 url,/guide/iphone
因为第一个路由已经匹配了相同的 url。
如果控制器在数据库中找不到对象,我不想在第一个操作中进行重定向。那么还有哪些其他选择呢?我是否需要创建一个自定义RouteHandler
或UrlRoutingModule
为此或有更简单的方法?