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

本文关键字:类型 发现 错误 路由 命名空间 | 更新日期: 2023-09-27 18:12:27

相关:

发现多个类型与名为';主页';

发现多个类型与名为';主页';-在两个不同的区域


发现多个类型与名为"FW"的控制器匹配。

"FW"请求已找到以下匹配的控制器:

app.Controllers.Admin.FWController

app.Areas.Management.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将删除冲突和错误,但我不完全理解原因。

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

你能试着这样重新安排你的烂摊子吗。问题可能是因为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" }
);

它看起来类似于我最近遇到的一个问题。

根据您的场景,并且遇到了同样的问题,我怀疑问题可能是控制器的命名约定。例如,您的应用程序在根结构中有一个名为FWController的控制器,然后在不同的区域中重新构建/维护代码。当您的应用程序启动时,Global.asax文件中的Application_Start()方法会注册路由到路由集合表(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"}
);

我根本没有接触我的区域注册.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" }
);

该请求还忽略了包含CCD_ 14名称空间的CCD_。这可能就是我相信的原因。希望它能帮助你。