基本上我有问题, 我想在多个控制器中进行一个默认操作,并使用我的自定义URL使用多个可选参数,如下所示:
www.mydomain.com/ {控制器名称} / {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参数时无法命中。
例如
www.mydomain.com/ {controller name} / {v1} / {v2}
- 醇>
www.mydomain.com/ {controller name} / {v1}
请帮助我/指导我,在我提到我的要求时,在MVC中使用路由的正确方法是什么。我很感激你的宝贵时间。提前谢谢。
答案 0 :(得分:5)
你必须通过修改每个控制器的路由来设置这样的路由配置,否则将为上述类型的场景调用默认路由配置,路由将变为这样。
www.mydomain.com/blog/ {V1} / {V 2} / {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
});
您必须为论坛的每个控制器手动执行此操作,结果路由仅适用于论坛控制器。
www.mydomain.com/forum/ {V1} / {V 2} / {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
});