Asp.net mvc 在MVC中,大括号在路线中是什么意思?

Asp.net mvc 在MVC中,大括号在路线中是什么意思?,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc Routing,我正在用一个MVC项目设置我的路线,但是我对花括号有点困惑 如果我有 routes.MapRoute( "Music", "Music/{name}", new { } ); 名字周围用大括号括起来的目的是什么,这会传递给什么东西吗?或者,如果我传入一个默认对象,这是否映射到某个对象?它们是路由请求中使用的参数名。例如,默认管线定义了其中三个: {controller}/{action}/{id} 控制器和动作参数用于查找控制器动作id参数可以用作这些操作中的输入 定义自定义路线时,必须提

我正在用一个MVC项目设置我的路线,但是我对花括号有点困惑

如果我有

routes.MapRoute( "Music", "Music/{name}", new {  } );

名字周围用大括号括起来的目的是什么,这会传递给什么东西吗?或者,如果我传入一个默认对象,这是否映射到某个对象?

它们是路由请求中使用的参数名。例如,默认管线定义了其中三个:

{controller}/{action}/{id}
控制器
动作
参数用于查找控制器动作<代码>id参数可以用作这些操作中的输入

定义自定义路线时,必须提供
控制器
操作
参数。如果URL中没有定义它们,您应该提供默认值,以便MVC知道当请求与该路由匹配时要运行什么操作

  routes.MapRoute("Music",
                  "Music/{name}",
                   new { controller="Music", action="SomeAction" });
您定义的其他参数,如
id
name
,可用于为操作提供输入。在您的示例中,
name
参数被传递给匹配操作,如下所示:

public ActionResult SomeAction(string name)
{
    //do something
}

我将尝试提供一个不那么做作的例子

ASP.NET MVC中的路由放在字典中,当有传入请求时,MVC管道会查看该请求并尝试确定将其路由到哪个控制器和操作

假设我有以下控制器:
主页
论坛
,以及
文章

当我们进行此操作时,假设我有以下操作:
查看
编辑
论坛
文章
控制器上创建

这些大括号允许我为以下两种情况创建一条管线:

routes.MapRoute("Viewing",
    {controller}/{action}/{id},
    new {controller = "Article", action="" },  //The article controller has precedence
    new { controller = "Article|Forum" } //contrived for this example
);
这些大括号意味着,无论他们放在哪个控制器中(只要它是基于约束的
文章
论坛
),相同的路径都有效。这使我不必为论坛和文章控制器中的每一个动作都设置路线

我可以很容易地走两条路线:

routes.MapRoute("Articles",
    article/{action}/{id},
    new {controller = "Article" } //The article controller has precedence
);

routes.MapRoute("Forums",
    forum/{action}/{id},
    new { controller = "forum" }
);
但这里有一些不需要的重复

路线也是相当棘手的事情,因为顺序很重要。顶部管线将在底部管线之前进行评估。如果它与top route的结构匹配,它将转到该操作,即使该操作不正确


Phil Haack有一个路由调试器可以帮助实现这一点。我还获取了他的源代码并对其进行了修改,这样您就可以(希望您也能在其中添加只允许内部人员查看的代码)。

卷发表示一种命名的通配符

“音乐/索引”
路由将只与URL
音乐/索引
匹配,其他内容不匹配

“Music/{Name}”
路由将匹配任何以Music开头并在斜杠后面有任何内容的URL。它将同时匹配URL
Music/metallica
Music/madonna

使用大括号,您可以从上述URL中选择“metallica”或“madonna”作为RouteValue

最后一个例子是:对于ASP.NET MVC,总是有一个标准路由<代码>{controller}/{action}/{id}。此路由将捕获诸如
音乐/流派/摇滚
产品/编辑/5
之类的URL。 这两个的结果RouteValue为:

  • 控制器=音乐,动作=体裁,id=摇滚
  • 控制器=产品,操作=编辑,最后一个id=5

试试这个:[Link][1][1]:是的,但是为什么要添加花括号呢?为什么不添加音乐/索引呢?大括号表示它是一个变量。如果不在大括号中,则表示静态文本。您可能希望在URL中定义常量部分。并非每件事都必须是一个变量。