【问题标题】:Can someone explain asp.net routing syntax to me?有人可以向我解释 asp.net 路由语法吗?
【发布时间】: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);

【问题讨论】:

    标签: asp.net syntax routing


    【解决方案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 示例正确吗?如果没有,你能重做它,所以它是正确的。我还是一头雾水。
      • 您的示例看起来不错,也许您可​​以发布一条不起作用的路线,然后我可以对此发表评论。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 2011-05-08
      • 1970-01-01
      • 2012-10-17
      • 2012-04-09
      • 2021-02-18
      相关资源
      最近更新 更多