发现多个控制器类型与 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();
}
}
我在使用属性路由和以下两个控制器时遇到一个奇怪的错误:
[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();
}
}