找到两个家用控制器

时间:2013-03-30 11:24:21

标签: asp.net-web-api

运行我的Web Api代码时,我收到此消息

Multiple types were found that match the controller named 'Home'. This can happen if the route that services this request ('{controller}/{action}/{id}') does not specify namespaces to search for a controller that matches the request. If this is the case, register this route by calling an overload of the 'MapRoute' method that takes a 'namespaces' parameter.

The request for 'Home' has found the following matching controllers:
A.Controllers.HomeController
N.Controllers.HomeController

但我只有一个家庭控制器。发生了什么事?

2 个答案:

答案 0 :(得分:2)

您可能已重命名MVC项目,旧DLL仍在bin文件夹中。请记住,ASP.NET MVC从bin文件夹中存在的所有程序集加载控制器。您必须在bin文件夹中查找所有程序集,并确保没有两次相同的控制器。

实际上,可以在同一个应用程序中使用相同的控制器名称两次。例如,假设您想在主要部分中使用HomeController,在某些区域中使用HomeController。配置路由时,您可以为包含控制器的命名空间指定命名空间约束:

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    namespaces: new[] { "MvcApplication1.Controllers" }
);

并在您的区域:

context.MapRoute(
    name: "Admin_default",
    url: "Admin/{controller}/{action}/{id}",
    defaults: new { action = "Index", id = UrlParameter.Optional },
    namespaces: new[] { "MvcApplication1.Areas.Admin.Controllers" }
);

答案 1 :(得分:1)

在编辑中查看(主页)名称 - >找。并查看它是否用于任何其他网页。还要确保页面不会从任何其他页面继承此控件。