具有一个固定动作的MVC路由和具有多个可选参数的控制器

基本上我有一个问题,我想在多个控制器中进行一个默认操作,并使用我的自定义URL使用多个可选参数,如下所示:

www.mydomain.com/{controller name} / {v1} / {v2} / {v3} / {v4}

并且也不希望在url中使用动作名称。 我在routeconfig.cs中有这个路由

routes.MapRoute( name: "Blog", url: "{controller}/{v1}/{v2}/{v3}/{v4}", defaults: new { controller = "Blog", action = "searchBlog", v1 = UrlParameter.Optional, v2 = UrlParameter.Optional, v3 = UrlParameter.Optional, v4 = UrlParameter.Optional }); routes.MapRoute( name: "Forum", url: "{controller}/{v1}/{v2}/{v3}/{v4}", defaults: new { controller = "Forum", action = "searchForum", v1 = UrlParameter.Optional, v2 = UrlParameter.Optional, v3 = UrlParameter.Optional, v4 = UrlParameter.Optional }); 

BlogController

 public ActionResult searchBlog(string v1=null,string v2 = null, string v3 = null, string v4 = null) { // use optional parameters here return View("Index"); } 

ForumController动作

 public ActionResult searchForum(string v1=null,string v2 = null, string v3 = null, string v4 = null) { // use optional parameters here return View("Index"); } 

我的动作用0,3和4参数命中,但在传递1或2参数时无法命中。

例如

  1. www.mydomain.com/{controller name} / {v1} / {v2}

  2. www.mydomain.com/{controller name} / {v1}

请帮助我/指导我,在我提到我的要求时,在MVC中使用路由的正确方法是什么。 我很感激你的宝贵时间。 提前致谢。

您必须通过修复每个控制器的路由来设置这样的路由配置,否则将为上述类型的场景调用默认路由配置,路由将变为这样。

http://www.mydomain.com/blog/{v1}/{v2}/{v3}/{v4}

此路由仅适用于博客控制器,因为我们已在此配置中修复了路由。

 routes.MapRoute( name: "Blog", url: "blog/{v1}/{v2}/{v3}/{v4}", defaults: new { controller = "Blog", action = "searchBlog", v1 = UrlParameter.Optional, v2 = UrlParameter.Optional, v3 = UrlParameter.Optional, v4 = UrlParameter.Optional }); 

您必须为论坛的每个控制器手动执行此操作,并且结果路由仅适用于论坛控制器。

http://www.mydomain.com/forum/{v1}/{v2}/{v3}/{v4}

 routes.MapRoute( name: "Forum", url: "forum/{v1}/{v2}/{v3}/{v4}", defaults: new { controller = "Forum", action = "searchForum", v1 = UrlParameter.Optional, v2 = UrlParameter.Optional, v3 = UrlParameter.Optional, v4 = UrlParameter.Optional });