说我的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中?
答案 0 :(得分:0)
看起来您目前无法使用属性路由进行上述操作,因为我能够找到的唯一顺序是在控制器本身内订购操作路径:
[Route("{category}", Name = "Category", Order = 1)]
但这对多种控制器类型错误没有帮助。在对属性路由与常规路由进行了大量研究之后,我发现的很多博客和答案都表明最好同时使用这两种类型,因为某些情况可能会保证其中一种。
我认为在我的情况下,因为该路由和控制器的顺序很重要,所以最好使用常规路由来确保它在最后(但在默认捕获之前)