为admin控制器添加路由

本文关键字:路由 添加 控制器 admin | 更新日期: 2023-09-27 18:17:28

我已经在Controller文件夹中的 admin 文件夹中放置了所有的admin控制器。由于我的一个管理控制器与 controller 文件夹中的另一个控制器的名称匹配,我得到以下错误:

发现多个类型匹配名为"Product"的控制器。如果服务此请求的路由('{controller}/{action}/{id}')没有指定名称空间来搜索与请求匹配的控制器,就会发生这种情况。如果是这种情况,通过调用带有'namespaces'参数的'MapRoute'方法的重载来注册该路由。

我尝试添加以下路由,但问题仍然是相同的

routes.MapRoute(
    "", //Route name 
    "Admin/{controller}/{action}/{id}", // Url with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional });

我怎样才能摆脱这个错误。更改控制器的名称是我最不愿意的选择。现在,我正在寻找一种方法来保留这个名字,看看是否能找到另一种方法来解决这个问题。

为admin控制器添加路由

我已经把我所有的管理控制器放在一个admin文件夹在控制器文件夹

嗯,那是你的问题。您如何期望默认控制器工厂知道您想要实例化哪个控制器给定以下请求/admin/index(控制器文件夹中的一个或控制器/Admin文件夹中的一个)?请记住,默认控制器工厂在派生自controller的加载程序集中搜索类型。它并不关心它们是在哪个文件夹中声明的。所以当它发现你有两个同名的控制器时它不知道该选哪个

一种可能性是使用区域。然后你可以在注册路由时指定名称空间:

routes.MapRoute(
    "", 
    "Admin/{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    new[] { "AppName.Areas.Admin.Controllers" }
);

也在全局文件中。因此,请确保为非区域控制器指定了名称空间:

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    new[] { "AppName.Controllers" }
);