MVC5属性路由相当于route.config路由

MVC5 attribute routing equivalent of route.config route

假设我的 route.config

中有以下内容
    public static void RegisterRoutes(RouteCollection routes)
    {
        if (routes != null)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapMvcAttributeRoutes();

            routes.MapRoute(name: "category", url: "{category}", defaults: new { controller = "Category", action = "Index" });

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }

我如何使用路由属性做我的类别路由的等价物?

我尝试了以下方法:

[Route("{action=Index}")]
public class CategoryController : Controller
{
    [Route("{category}")]
    public ActionResult Index(string category)
    {
        return View(category);
    }
}

但这会引发错误:

Multiple controller types were found that match the URL. This can happen if attribute routes on multiple controllers match the requested URL.

是否可以或是否需要将此留在 route.config?

看来您目前无法通过属性路由执行上述操作,因为我能找到的唯一顺序是在控制器本身内对操作路线进行排序:

[Route("{category}", Name = "Category", Order = 1)]

但这对多控制器类型错误没有帮助。在对属性路由与约定路由进行了更多研究之后,我遇到的许多博客和答案都指出,最好将这两种类型一起使用,因为某些情况下可能需要一种或另一种。

我认为在我的例子中路由和控制器的顺序很重要,那么最好使用常规路由来确保它在最后(但在默认 catch all 之前)