属性路由差异?

时间:2014-12-30 11:11:54

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

以下是什么区别?

[Route("movies/genre/{genre}")]
public ActionResult ViewByGenre(string genre="action")

而不是

[Route("movies/genre/{genre=action}")]
public ActionResult ViewByGenre(string genre)

1 个答案:

答案 0 :(得分:4)

在此声明中

[Route("movies/genre/{genre}")]
public ActionResult ViewByGenre(string genre="action")

genre参数在路由中不是可选的,只有ViewByGenre函数会对其进行定值。

这里

[Route("movies/genre/{genre=action}")]
public ActionResult ViewByGenre(string genre)

你是说genre参数在路线中是可选的。如果它到达null,则需要action值。 ViewByGenre函数总是应该有类型参数valorized

请参阅here了解文档

通过这种方式,您可以进行属性路由。优点是属性路由使您可以更好地控制应用程序中的URI,当您在代码中编辑某些内容时,它不会破坏其他路由。 另一方面,公约基本规则的一个例子就是你在RouteConfig.cs文件中决定你的规则时这样

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapMvcAttributeRoutes();

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