繁体   English   中英

MVC4:相同的URL库用于不同的操作

[英]MVC4: same url base for different actions

我想要两条与这些路线相似的路线:

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

显然,像这样,第二条路由将永远不会与/guide/iphone这样的URL匹配,因为第一条路由已经与相同的URL匹配。

如果控制器无法在数据库中找到对象,则我不想在第一个操作中进行重定向。 那么还有哪些其他选择呢? 我是否需要为此创建自定义RouteHandlerUrlRoutingModule或是否有更简单的方法?

如果{urlname}是一个暗示的网址,则可以添加一个约束来测试该网址是否与正则表达式匹配:

http://www.asp.net/mvc/tutorials/controllers-and-routing/creating-a-route-constraint-cs

更改顺序,它将起作用:

routes.MapRoute("Search", "guide/{keyword1}/{keyword2}", new { controller = "Guide", action = "Index" });
routes.MapRoute("Detail", "guide/{urlname}", new { controller = "Application", action = "Detail" });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM