有人可以向我解释 asp.net 路由语法吗?
Posted
技术标签:
【中文标题】有人可以向我解释 asp.net 路由语法吗?【英文标题】:Can someone explain asp.net routing syntax to me? 【发布时间】:2011-03-10 12:44:08 【问题描述】:我在 Web 窗体方案中处理此代码:
public static void RegisterRoutes(RouteCollection routes)
Route r = new Route("*url", new MyRouteHandler());
routes.Add(r);
routes.IgnoreRoute("resource.axd/*pathInfo");
routes.IgnoreRoute("resource.gif/*pathInfo");
首先,谁能告诉我 *pathInfo 的定义在哪里? http://msdn.microsoft.com/en-us/library/cc668201.aspx#url_patterns 并没有真正定义它。是否:
routes.IgnoreRoute("resource.axd/*pathInfo");
匹配
/c/xyz.axd and
/b/c/xyz.axd and
/a/b/c/xyz.axd
而
routes.IgnoreRoute("resource.axd");
只匹配
/xyz.axd
其次,在:
*url
* 是什么意思?以及整个表达是什么意思。有没有什么地方解释清楚了?
第三,我需要添加这些表达式以正确忽略路由的特定顺序吗?我知道 *url 是某种包罗万象的东西,如果 IgnoreRoutes 出现在它之前还是之后,例如
routes.IgnoreRoute("resource.axd/*pathInfo");
routes.IgnoreRoute("resource.gif/*pathInfo");
Route r = new Route("*url", new MyRouteHandler());
routes.Add(r);
【问题讨论】:
【参考方案1】:我的 2 美分: 路线不是正则表达式。它只是组成路由的可变和静态组件,由段分隔(由斜线标识)。有一个特殊符号,最后一个变量中的星号,这意味着从这里开始,忽略段分隔符——斜杠。所以,
*url
是最简单的路由,因为它意味着获取整个 URL,将其放入变量 'url' 中,然后将其传递给与该路由关联的页面。
controller/action/id
将第一段中的所有内容(直到第一个斜线)放入变量“controller”,将第一个和第二个 / 之间的所有内容放入变量“action”,以及第二个和第三个斜杠之间的所有内容(或结束)到变量'id'中。然后将这些变量传递到相关页面。
resource.axd/*pathInfo
在这里,将 .axd/ 之前的信息(并且不能有任何斜线!)放入“resource”,并将第一个 / 之后的所有内容放入“pathInfo”。由于这通常是一个ignoreRoute,所以不是将它传递给关联的页面,而是由StopHandler处理,这意味着路由不会处理它,而是由非路由HttpHandler处理。
正如 bleevo 所说,路由按照添加到集合中的顺序执行。所以必须在处理通用路由之前添加 IgnoreRoute 。
这是马嘴:http://msdn.microsoft.com/en-us/library/cc668201.aspx
具体到您的示例,我会将 IgnoreRoute 线放在您的 Route 添加之上,因为您的路线实际上是一个包罗万象的。另外,请记住,仅当 gif 位于根目录中时才会忽略 .gif。
【讨论】:
【参考方案2】:pathinfo 只是一个桶的标签。例如*pathinfo
表示将resource.axd/
之后的所有内容放入路径信息中。
路由按照您在路由表中放置的顺序执行,因此如果您的第一个路由是一个捕获,那么其余的将永远不会执行。
【讨论】:
我上面的 pathInfo 示例正确吗?如果没有,你能重做它,所以它是正确的。我还是一头雾水。 您的示例看起来不错,也许您可以发布一条不起作用的路线,然后我可以对此发表评论。以上是关于有人可以向我解释 asp.net 路由语法吗?的主要内容,如果未能解决你的问题,请参考以下文章
有人可以向我解释为啥完美平方是 O(sqrt(n)) 的运行时间吗?
KeyStore、HttpClient 和 HTTPS:有人可以向我解释这段代码吗?