我将这两条路线映射出来:
routes.MapRoute(
"Admin",
"admin/{controller}/{action}/{id}",
new { controller = "Admin", action = "index", id = "" }
);
然后我有:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
所以2条路线是相同的,除了第一条路线在URL中有/ admin前缀。
这就是发生的事情,我不知道如何解释这个:
当我去:
www.example.com/user/verify
重定向到
www.example.com/admin/user/complete
而不是
www.example.com/user/complete
操作验证只需重定向到完成,如下所示:
返回RedirectToAction(“完成”,“用户”);
所有完整的操作都会填充ViewModel,然后调用视图。
如何重定向并将前缀/ admin /添加到网址?
答案 0 :(得分:0)
我相信它会重定向到Admin路由,因为Admin路由是第一个包含所有匹配参数的路径(在提供的情况下是控制器和操作)。如果你想使用这样的东西,你需要使用areas(MVC2)或使用命名的路由重定向。
答案 1 :(得分:0)
admin是你的控制器,你不需要管理员/控制器/动作,默认路由可以正常工作
你需要的只是一个管理员控制器,默认路由会找到它
ie {controller} / {action} / {id}
将/ admin / addproduct发送到名为admin的控制器和名为addproduct的操作 你只需要添加路线,如果你想要自定义的东西,例如
/产品/电视/ HDTV / 2
其中产品是控制器,最后3个是category,subcategory和pagenumber 在控制器上,您将其指向您的路线。
希望有意义
答案 2 :(得分:0)
不确定控制器的确切结构,但您可以向第一个MapRoute添加约束,以将其限制为您希望路径应用于的特定控制器:
routes.MapRoute(
"Admin",
"admin/{controller}/{action}/{id}",
new { controller = "Admin", action = "index", id = "" } ,
new { controller = "[Some regex Expression - e.g. Admin]" }
);
这将使路线仅适用于那些与控制器相关的路线。您还可以使用this tool来调试路由。取决于你如何组织结构,但像@NickLarson所说 - 听起来像你使用MVC 2的区域功能。
答案 3 :(得分:0)
mvc在匹配路由器的同时从上到下,这就是“你为什么要处理这个问题”