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 之前)
假设我的 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 之前)