是的,routes.IgnoreRoute("{x}.axd/{*y}") 仍然有效。
占位符 - {placeholderName}
大括号内的值称为placeholders。这些只是变量,可以随意命名。在评估传入的 URL 时,名称根本不重要。但在生成 URL 或计算操作方法参数或模型属性值时,这些名称必须匹配。
在IgnoreRoute 的情况下,没有生成任何 URL,所以这些名称基本上是句法上的 surgar。
Catch-All 占位符 - {*placeholderName}
星号* 表示catch-all 占位符。它基本上是在说“匹配 URL,即使从这里到 URL 末尾的其余部分与传入的 URL 不匹配”。
正斜杠 - /
在本例中使用包罗万象的占位符时,它表示 1 个或多个 可选 段。由于这些段是可选的,所以最右边的 / 也是可选的。这与使用Default 路由时的行为相同:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
当最右边的段是可选的并且没有在 URL (Home/About) 中提供时,这使得最右边的斜线 / 也是可选的。如果下一个最右边的段也是可选的并且被省略,那么下一个最右边的/ 也是可选的。这解释了为什么默认路由匹配主页/,而不是要求// 才能匹配。
此行为很特殊,仅适用于/。如果你有不同分隔符的占位符,比如{foo}-{bar}和bar被标记为UrlParameter.Optional,-仍然是必需的(实际上{bar}也是必需的)。 /1-2 匹配,/1- 和 /1 不匹配。
查询字符串 - ?key=value&key2=value2
匹配传入路由时,查询字符串参数将被完全忽略。之所以将查询字符串值提供给 MVC 的 ModelBinder 并作为操作方法参数,是因为它们稍后在请求中由 value providers 处理。
另一方面,在生成 URL 时(例如 ActionLink),任何剩余的不匹配路由值(在请求中或直接提供)都将作为查询添加到生成的 URL 的末尾字符串参数。
@Html.ActionLink("Link", "Home", "About", new { key = "value", key2 = "value2" }, null)
假设Default路由,这个ActionLink会生成URL
/Home/About?key=value&key2=value2