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" }
);