对于我的管理区域,我创建了一条特殊的路线。我这样做是为了使我的网址看起来更整洁,并且避免了我有两个名称相同的控制器的问题。
示例:对于应用程序的管理站点,我有一个UserController和另一个AdminUserController。
我不希望URL像这样:
http://www.example.com/user/...
http://www.example.com/admin/adminuser/...
我希望管理网址看起来像:
http://www.example.com/admin/user/...
现在,要获取此url结构,请尝试以下操作:
我将管理控制器命名为:AdminUserController
然后我的路线如下所示:
routes.Add(new Route("admin/Admin{controller}/{action}/{id}", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new { controller = "Admin", action = "index", Id=""});
});
能行吗? (该路线目前无法正常运行)
我确保此路由高于通用路由。
更新资料
我希望所有的管理网址都以/ admin /文件夹作为前缀,因此:
www.example.com/admin/user
www.example.com/admin/settings
www.example.com/admin/articles
和非管理员类似:
www.example.com/user
www.example.com/articles
最佳答案
不,那行不通。
请记住,我们将“ Controller”附加到为{controller}传入的URL部分。因此,在那里可以使用的URL是:
/ admin / AdminAdminUser /
试试这个吧。
routes.Add(new Route("admin/user/admin/{action}/{id}", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new { controller = "AdminUser", action = "index", Id=""})
});
我假设AdminUser控制器是一种特殊情况,并且您没有其他以/ user /开头的控制器。如果这样做,另一种方法是将AdminUserController重命名回AdminController。然后:
routes.Add(new Route("admin/user/{controller}/{action}/{id}", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new { controller = "Admin", action = "index", Id=""}),
Constraints = new RouteValueDictionary(new { controller = "Admin|Other|Other2"})
});
在这里,我使用约束来限制此特定路由适用的控制器。
顺便说一句,我建议使用MapRoute扩展方法。它们减少了冗长的路由注册。
关于c# - 我的路线没有开火,应该行吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2148783/