我正在学习asp.net MVC,并对这一部分感到困惑。
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");每一篇文章,包括pathInfo}"),都说了同样的话:“这段代码是要忽略对axd文件的请求。”
如果我将代码更改为
routes.IgnoreRoute("{x}.axd/{*y}");还能用吗?
花括号里的东西有关系吗?
发布于 2018-01-21 20:31:06
是的,routes.IgnoreRoute("{x}.axd/{*y}")还能工作。
占位符- {placeholderName}
花括号中的值称为placeholders。这些都是简单的变量,可以任意命名。在评估传入URL时,名称根本不重要。但是,在生成URL或计算动作方法参数或模型属性值时,这些名称必须匹配。
在IgnoreRoute的例子中,没有生成URL,所以这些名称基本上是语法操作。
捕获所有占位符- {*placeholderName}
星号*表示一个捕获-所有占位符。它基本上是说“匹配URL,即使从这里到URL末尾的其他段与传入的URL不匹配”。
前斜线- /
如本例所示,当使用所有捕获占位符时,它指示一个或多个可选段。因为这些段是可选的,所以最右边的/也是可选的。在使用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发布于 2018-01-21 20:27:51
当路由映射到Controller (=class)中的Action (=方法)时,方括号中的'things‘很重要。在花括号之间指定的名称映射到操作的参数上,如下所示:
Account/{action}/{id}/{timestamp}
将下列功能参数化:
public IActionResult Home(int id, DateTime timestamp) { ...
星号*表示在此之后可以出现零或多个路径段(如在RegEx中)。例如,/a/b/c/d/e/...。
https://stackoverflow.com/questions/48371215
复制相似问题