我总是收到以下错误:
找到与URL匹配的多种控制器类型。如果多个控制器上的属性路由与请求的URL匹配,则会发生这种情况
网站结构:
├── Areas
│ └── Admin
│ └── Controllers
│ ├── HomeController
│ ├── WorkController
│ └── AnotherController
└── Controllers
└── HomeController
我希望使用的URL:
mysite.com
mysite.com/admin (admin/Controllers/HomeController/Index)
mysite.com/admin/work/ (admin/Controllers/Work/Index)
mysite.com/admin/another/ (admin/Controllers/Another/Index)
这些工作,每当我尝试路由mysite.com/admin时,我都会收到错误消息。我正在尝试默认的管理路由处理登录。其余路由返回默认的Index()操作。
我正在像这样使用属性路由:
namespace MyProject.Areas.Admin.Controllers
{
[RouteArea("admin")]
[RoutePrefix("home")]
[Route("{action=index}")]
public class AnotherController : BaseController
{
public HomeController()
{
}
public ActionResult Index()
{
// a login section
}
}
}
namespace MyProject.Areas.Admin.Controllers
{
[RouteArea("admin")]
[RoutePrefix("work")]
[Route("{action=index}")]
public class WorkController : BaseController
{
public WorkController()
{
}
[Route("{startPage:int?}/{pageSize:int?}")]
public ActionResult Index(int? startPage, int? pageSize)
{
//...
}
}
}
namespace MyProject.Areas.Admin.Controllers
{
[RouteArea("admin")]
[RoutePrefix("another")]
[Route("{action=index}")]
public class AnotherController : BaseController
{
public AnotherController()
{
}
[Route("{startPage:int?}/{pageSize:int?}")]
public ActionResult Index(int? startPage, int? pageSize)
{
//...
}
}
}
常规路由处理站点的不在管理区域下的部分,这很好。
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional},
new[] { "MyProject.Controllers" }
);
}
}
我最终试图在使用大量分页的整个网站中获得友好的URL名称。我最初的问题描述为here,其中推荐的解决方案是属性路由。属性路由当然有帮助,但是现在我遇到了这个问题,其中我无法加载默认的登录页面。
我认为某个地方需要约束,但是我不确定如何解决这个问题。
有什么想法吗?谢谢。