C# 即使指定了命名空间,仍发现多个类型路由错误

C# 即使指定了命名空间,仍发现多个类型路由错误,c#,asp.net-mvc-3,controller,routes,C#,Asp.net Mvc 3,Controller,Routes,相关的: 找到多个与名为“FW”的控制器匹配的类型 “FW”请求已找到以下匹配控制器: app.Controllers.Admin.FWController app.Areas.Manage.Controllers.FWController 我尝试了那些相关链接的建议。我尝试使用不同的名称空间来区分控制器: global.asax.cs routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", ne

相关的:


找到多个与名为“FW”的控制器匹配的类型

“FW”请求已找到以下匹配控制器:

app.Controllers.Admin.FWController

app.Areas.Manage.Controllers.FWController

我尝试了那些相关链接的建议。我尝试使用不同的名称空间来区分控制器:

global.asax.cs

routes.MapRoute(
 "Default", // Route name
 "{controller}/{action}/{id}",
 new { controller = "Account", action = "LogOn", id = UrlParameter.Optional },
 new string[] { "app.Controllers" }
);
routes.MapRoute(
 "Default_Admin_Top", // Route name
 "{controller}/{action}/{id}", // URL with parameters
 new { controller = "Account", action = "LogOn", id = UrlParameter.Optional },
 new string[] { "app.Controllers.Admin" }
);
在管理区域
ManageAreaRegistration

public override void RegisterArea(AreaRegistrationContext context)
{
 context.MapRoute(
  "Manage_default",
  "Manage/{controller}/{action}/{id}",
  new { action = "Index", id = UrlParameter.Optional },
  new string[] { "app.Areas.Manage.Controllers" }
 );
}
我还在
bin
文件夹中查找旧版本,但只有当前版本

我错过了什么?看来这应该行得通

问题似乎围绕着这样一个事实:我为我的控制器提供了自己的名称空间,但它不在自己的区域内:

namespace app.Controllers.Admin
{
 public class FWController : Controller{}
}

从这里的名称空间中删除
.Admin
将删除冲突和错误,但我不完全理解原因。

这看起来类似于我最近遇到的问题

根据您的场景并经历过相同的问题,我怀疑问题可能是控制器的命名约定。例如,应用程序在根结构中有一个名为
FWController
的控制器,然后在单独的区域中重新构造/维护代码。当应用程序启动时,
application\u Start()
方法在
Global.asax
文件中注册路由到路由收集表(MVC 3模式的核心功能之一),当操作方法在控制器内执行时,该表会维护传入请求

当您有一个与您案例中的
FWController
相同名称的控制器,并且区域的目录结构以某种方式模仿根目录时,就会出现问题,正如您在一个引用的URL中看到的那样

我实现了一个类似的解决方案作为URL的理由之一,即

routes.MapRoute(
  "Default", // Route name
  "{controller}/{action}/{id}", // URL with parameters
  new { controller = "Home", action = "Index", id = UrlParameter.Optional },   //Parameter defaults               
  new []{"MyProject.WWW.Controllers"}
);
我根本没有碰我的area registration.cs文件

重命名名称空间时,路由开始指向
app.Controllers.FWController
(不在
app.Areas.Manage.Controllers.FWController
),它解决了之前发生的冲突,因为您在
Global.asax
中指定了此项

routes.MapRoute(
  "Default", // Route name
  "{controller}/{action}/{id}",
  new { controller = "Account", action = "LogOn", id = UrlParameter.Optional },
  new string[] { "app.Controllers" }
);

该请求还忽略了包含
.admin
命名空间的
MapRoute
。这可能就是我相信的原因。希望这对你有帮助。

你能像这样重新整理你的死记硬背吗。出现此问题的原因可能是
app.Controllers.Admin
位于
app.Controller

routes.MapRoute(
 "Default_Admin_Top", // Route name
 "{controller}/{action}/{id}", // URL with parameters
 new { controller = "Account", action = "LogOn", id = UrlParameter.Optional },
 new string[] { "app.Controllers.Admin" }
);
routes.MapRoute(
 "Default", // Route name
 "{controller}/{action}/{id}",
 new { controller = "Account", action = "LogOn", id = UrlParameter.Optional },
 new string[] { "app.Controllers" }
);