使用以下两个控制器进行属性路由时,我遇到了一个奇怪的错误:
[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();
如您所见,第二个控制器应具有搜索前缀
但是如果我去dev.local / search?searchterm = test
我得到了错误
该请求已找到以下匹配的控制器类型: Marshalls.WebComponents.Web.Controllers.SearchController Marshalls.WebComponents.Web.Controllers.HomeController
如果我从家庭控制器中删除了[Route("{action=Index}")]
,它将可以正常工作,但是我无法使用http://dev.local/
进入主页
这种情况以前从未发生过,通常可以正常运行,所以我想知道是否有人可以发现我弄乱了任何明显的东西
答案 0 :(得分:3)
为HomeController添加RoutePrefix,并将Route从控制器移至方法/动作。
Route和RoutePrefix属性中的空字符串表示此控制器或操作为默认设置。
http://dev.local/ => HomeController和Index操作
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();
}
}