对于我的管理区域,我创建了一条特殊的路线。我这样做是为了使我的网址看起来更整洁,并且避免了我有两个名称相同的控制器的问题。

示例:对于应用程序的管理站点,我有一个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/

10-15 11:38