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

时间:2016-02-12 12:21:16

标签: asp.net-mvc asp.net-mvc-5 routing attributerouting

说我的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);
    }
}

但这引发了一个错误:

  

找到了与URL匹配的多种控制器类型。如果多个控制器上的属性路由与请求的URL匹配,则会发生这种情况。

是否可以或者我需要将此保留在route.config中?

1 个答案:

答案 0 :(得分:0)

看起来您目前无法使用属性路由进行上述操作,因为我能够找到的唯一顺序是在控制器本身内订购操作路径:

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

但这对多种控制器类型错误没有帮助。在对属性路由与常规路由进行了大量研究之后,我发现的很多博客和答案都表明最好同时使用这两种类型,因为某些情况可能会保证其中一种。

我认为在我的情况下,因为该路由和控制器的顺序很重要,所以最好使用常规路由来确保它在最后(但在默认捕获之前)