Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 添加管理员控制器的路由_C#_Asp.net Mvc 3_Asp.net Mvc Routing - Fatal编程技术网

C# 添加管理员控制器的路由

C# 添加管理员控制器的路由,c#,asp.net-mvc-3,asp.net-mvc-routing,C#,Asp.net Mvc 3,Asp.net Mvc Routing,我已将所有管理员控制器放置在控制器文件夹中的管理员文件夹中。由于我的一个管理控制器与控制器文件夹中另一个控制器的名称相匹配,因此出现以下错误 找到多个与名为“Product”的控制器匹配的类型。如果为该请求提供服务的路由(“{controller}/{action}/{id}”)未指定名称空间来搜索与该请求匹配的控制器,则可能发生这种情况。如果是这种情况,请通过调用采用“namespaces”参数的“MapRoute”方法的重载来注册此路由 我尝试添加以下路径,但问题仍然是一样的 routes.

我已将所有管理员控制器放置在控制器文件夹中的管理员文件夹中。由于我的一个管理控制器与控制器文件夹中另一个控制器的名称相匹配,因此出现以下错误

找到多个与名为“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/index
(控制器文件夹中的控制器或控制器/admin文件夹中的打开),您希望默认控制器工厂如何知道要实例化的控制器?请记住,默认控制器工厂会在加载的程序集中搜索从控制器派生的类型。它并不真正关心它们是在哪个文件夹中声明的。因此,当它发现您有两个同名的控制器时,它不知道选择哪一个

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

routes.MapRoute(
    "", 
    "Admin/{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    new[] { "AppName.Areas.Admin.Controllers" }
);
另外,在Global.asax中,请确保为非区域控制器指定名称空间:

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    new[] { "AppName.Controllers" }
);
我已将所有管理员控制器放置在控制器文件夹中的管理员文件夹中

那是你的问题。根据以下请求
/admin/index
(控制器文件夹中的控制器或控制器/admin文件夹中的打开),您希望默认控制器工厂如何知道要实例化的控制器?请记住,默认控制器工厂会在加载的程序集中搜索从控制器派生的类型。它并不真正关心它们是在哪个文件夹中声明的。因此,当它发现您有两个同名的控制器时,它不知道选择哪一个

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

routes.MapRoute(
    "", 
    "Admin/{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    new[] { "AppName.Areas.Admin.Controllers" }
);
另外,在Global.asax中,请确保为非区域控制器指定名称空间:

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

谢谢……这就是我想要实现的。我有一个想法,控制器工厂不关心文件夹和所有的东西。但是找不到你给出的解决方案。甚至asp.net网站上的文章也没有涉及这个问题。我需要在名称空间中添加
区域
。不仅仅是
AppName.Admin.Controllers
就能做到吗?@PankajUpadhyay,这将取决于你是否使用区域以及你的控制器是在什么名称空间中组织的。它没有那么健壮。我已将我的管理员控制器名称空间重命名为
PriceCompare.Areas.admin.Controllers
。这解决了问题,但我可以通过在它前面添加
Admin/
来访问任何常规控制器。此外,我可以直接访问我的管理员控制器,而不必在他们面前显示
admin/
。谢谢……这就是我想要实现的目标。我有一个想法,控制器工厂不关心文件夹和所有的东西。但是找不到你给出的解决方案。甚至asp.net网站上的文章也没有涉及这个问题。我需要在名称空间中添加
区域
。不仅仅是
AppName.Admin.Controllers
就能做到吗?@PankajUpadhyay,这将取决于你是否使用区域以及你的控制器是在什么名称空间中组织的。它没有那么健壮。我已将我的管理员控制器名称空间重命名为
PriceCompare.Areas.admin.Controllers
。这解决了问题,但我可以通过在它前面添加
Admin/
来访问任何常规控制器。此外,我可以直接访问我的管理员控制器,而无需在他们面前显示
admin/