有人可以向我解释 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,所以不是将它传递给关联的页面,而是由Stop​​Handler处理,这意味着路由不会处理它,而是由非路由HttpHandler处理。

正如 bleevo 所说,路由按照添加到集合中的顺序执行。所以必须在处理通用路由之前添加 IgnoreRoute 。

这是马嘴:http://msdn.microsoft.com/en-us/library/cc668201.aspx

具体到您的示例,我会将 IgnoreRoute 线放在您的 Route 添加之上,因为您的路线实际上是一个包罗万象的。另外,请记住,仅当 gif 位于根目录中时才会忽略 .gif。

【讨论】:

【参考方案2】:

pathinfo 只是一个桶的标签。例如*pathinfo 表示将resource.axd/ 之后的所有内容放入路径信息中。

路由按照您在路由表中放置的顺序执行,因此如果您的第一个路由是一个捕获,那么其余的将永远不会执行。

【讨论】:

我上面的 pathInfo 示例正确吗?如果没有,你能重做它,所以它是正确的。我还是一头雾水。 您的示例看起来不错,也许您可​​以发布一条不起作用的路线,然后我可以对此发表评论。

以上是关于有人可以向我解释 asp.net 路由语法吗?的主要内容,如果未能解决你的问题,请参考以下文章

有人可以向我解释为啥 L(长)必须在那里吗? [复制]

有人可以向我解释为啥完美平方是 O(sqrt(n)) 的运行时间吗?

KeyStore、HttpClient 和 HTTPS:有人可以向我解释这段代码吗?

有人可以向我解释如何使用我的代码解决下面的参数错误吗?

有人可以向我解释一起使用的 Math.random() 和宽度/高度吗?

有人可以向我解释一下逻辑回归中成本函数和梯度下降方程之间的区别吗?