即使指定了命名空间,也有多个类型发现路由错误
本文关键字:类型 发现 错误 路由 命名空间 | 更新日期: 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_。这可能就是我相信的原因。希望它能帮助你。