如何避免多个控制器匹配属性路由

时间:2019-12-11 09:56:46

标签: c# asp.net-mvc-5 routing

我总是收到以下错误:

找到与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,其中推荐的解决方案是属性路由。属性路由当然有帮助,但是现在我遇到了这个问题,其中我无法加载默认的登录页面。

我认为某个地方需要约束,但是我不确定如何解决这个问题。

有什么想法吗?谢谢。

0 个答案:

没有答案
相关问题