【问题标题】:ASP.NET MVC - Multiple types were found that match the controllerASP.NET MVC - 找到与控制器匹配的多种类型
【发布时间】:2023-04-06 12:29:02
【问题描述】:

当两个控制器具有相同名称时,我遇到了一个常见错误:

找到了与名为“Items”的控制器匹配的多种类型。 如果服务此请求的路由会发生这种情况 ('{controller}/{action}/{id}') 未指定要搜索的命名空间 对于与请求匹配的控制器。如果是这种情况, 通过调用“MapRoute”方法的重载来注册此路由 这需要一个“命名空间”参数。

“项目”的请求找到了以下匹配的控制器:

Stock.Controllers.ItemsController

Stock.Areas.Admin.Controllers.ItemsController

这是真的,因为我在不同的命名空间中确实有两个具有此名称的控制器(如上面的错误中所命名)。但是,我看到的大多数修复都是将命名空间添加到默认根目录,例如

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
        new string[] { "Stock.Controllers" }
    );

在我的 AdminAreaRegistration.cs 文件中,创建的默认路由是:

    context.MapRoute(
        "Admin_default",
        "Admin/{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional }
    );

所以我尝试将命名空间添加到该路由,但这也没有解决它,例如

    context.MapRoute(
        "Admin_default",
        "Admin/{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional },
        new string[] { "Stock.Areas.Admin.Controllers" }
    );

我已确保正在调用 AreaRegistration.RegisterAllAreas,例如

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
}

谁能发现我遗漏的东西或建议我应该做些什么来让两个控制器都工作?

谢谢

【问题讨论】:

  • 它应该可以正常工作..你可以尝试重建项目或从bin文件夹中删除项目DLL并重试
  • 是的,尝试了好几次都没有成功,甚至从“debug”和“bin”文件夹中删除了文件
  • 在 AdminAreaRegistration.cs 添加controller = "Home",重建解决方案并重试

标签: c# asp.net-mvc routes


【解决方案1】:

我找到了解决我的问题的方法,我必须通过“ControllerBuilder.Current.DefaultNamespaces.Add”方法在应用程序启动事件上添加默认命名空间:

protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            ControllerBuilder.Current.DefaultNamespaces.Add("Stock.Controllers"); // Add This
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 2023-03-28
    • 2021-06-06
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多