发现多个控制器类型与 mvc 应用程序中的 URL 匹配

Multiple controller types were found that match the URL in mvc app

我在使用属性路由和以下两个控制器时遇到一个奇怪的错误:

[Route("{action=Index}")]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

[RoutePrefix("search")]
[Route("{action=Index}")]
public class SearchController : Controller
{
    public ActionResult Index(string searchTerm)
    {
        return View();
    }
}

并且在路由配置中:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();

如您所见,第二个控制器应该有搜索前缀

但是如果我去开发local/search?searchterm=test

我收到错误

The request has found the following matching controller types: Marshalls.WebComponents.Web.Controllers.SearchController Marshalls.WebComponents.Web.Controllers.HomeController

如果我从家庭控制器中删除 [Route("{action=Index}")],它会正常工作,但是我无法使用 http://dev.local/

进入主页

以前没有发生过这种情况,而且通常工作正常,所以我想知道是否有人能发现我搞砸的任何明显问题

为 HomeController 添加 RoutePrefix 并将 Route 从控制器移动到 methods/actions。

Route 和 RoutePrefix 属性中的空字符串表示此控制器或操作是默认的。

http://dev.local/ => HomeController 和索引操作

http://dev.local/search?searchTerm=123 => SearchController 和 Index 操作

请记住,只有一个控制器可以有空的 RoutePrefix,控制器中只有一个动作可以有空的 Route

[RoutePrefix("")]
public class HomeController : Controller
{
    [Route("")]
    public ActionResult Index()
    {
        return View();
    }
}

[RoutePrefix("search")]
public class SearchController : Controller
{
    [Route("")]
    public ActionResult Index(string searchTerm)
    {
        return View();
    }
}