【发布时间】:2014-05-21 00:40:32
【问题描述】:
我正在使用 MVC 属性路由 (MVC 5.1.2) 并遇到错误:
找到多个与 URL 匹配的控制器类型。如果多个控制器上的属性路由与请求的 URL 匹配,就会发生这种情况。
请求找到了以下匹配的控制器类型: FFInfo.WebUI.Areas.Admin.Controllers.HomeController FFInfo.WebUI.Areas.Admin.Controllers.SectionController
只有当我转到/Admin/Sections/ 时才会发生这种情况,我不确定为什么只有一条路由可以匹配该 URL,谁能帮我找出问题所在?请注意这个问题是 5.1.2 独有的,MVC 5.0 可以正常工作。
基础控制器:
[RouteArea("Admin")]
public class BaseController : Controller
{
}
家庭控制器:
[RoutePrefix("")]
[Route("{action}")]
public class HomeController : BaseController
{
public ActionResult Index()
{
}
public ActionResult Updates()
{
}
[ChildActionOnly]
public PartialViewResult GetUpdatesGrid()
{
}
public ActionResult GetUpdates(JqGridRequest Request)
{
}
}
部分控制器:
[RoutePrefix("Sections")]
[Route("{action}")]
public class SectionController : BaseController
{
[Route]
public ActionResult Sections()
{
}
[ChildActionOnly]
public PartialViewResult GetSectionsGrid()
{
}
public ActionResult GetSections(JqGridRequest Request)
{
}
public ActionResult AddSection()
{
}
[HttpPost, ValidateAntiForgeryToken]
public ActionResult AddSection(AddEditSectionVM model, HttpPostedFileBase LogoFile)
{
}
public ActionResult EditSection(Int16? ID)
{
}
[HttpPost, ValidateAntiForgeryToken]
public ActionResult EditSection(AddEditSectionVM model, HttpPostedFileBase Logo)
{
}
public ActionResult Releases()
{
}
[ChildActionOnly]
public PartialViewResult GetReleasesGrid()
{
}
public ActionResult GetReleases(JqGridRequest Request)
{
}
public ActionResult AddRelease()
{
}
[HttpPost, ValidateAntiForgeryToken]
public ActionResult AddRelease(AddEditReleaseVM model)
{
}
}
我对@987654325@RoutePrefix和Route属性的理解告诉我/Admin/Index会调用Home Controller的IndexActionResult,而URLAdmin/Sections应该调用Index部分控制器的ActionResult。所有其他路由在每个控制器中都运行良好,当您转到 /Admin/Index 时,运行良好。当我转到/Admin/Sections 时,我只会收到此错误。怎么了?
【问题讨论】:
标签: asp.net-mvc-5 attributerouting