有人可以向我解释asp.net路由语法吗?

Pet*_*ras 25 asp.net syntax routing

我正在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}");

  }
Run Code Online (Sandbox Code Playgroud)

首先,谁能告诉我{*pathInfo}的定义在哪里? http://msdn.microsoft.com/en-us/library/cc668201.aspx#url_patterns并没有真正定义它.请问:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
Run Code Online (Sandbox Code Playgroud)

比赛

/c/xyz.axd and 
/b/c/xyz.axd and
/a/b/c/xyz.axd 
Run Code Online (Sandbox Code Playgroud)

routes.IgnoreRoute("{resource}.axd");
Run Code Online (Sandbox Code Playgroud)

只有比赛

/xyz.axd
Run Code Online (Sandbox Code Playgroud)

其次,在:

{*url}
Run Code Online (Sandbox Code Playgroud)

这是什么意思?整个表达是什么意思.有没有明确解释的地方?

第三,是否需要添加这些表达式以正确忽略路由?我知道如果IgnoreRoutes在它之前或之后出现,{*url}是某种类型的catchall

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{resource}.gif/{*pathInfo}");
Route r = new Route("{*url}", new MyRouteHandler());
routes.Add(r);
Run Code Online (Sandbox Code Playgroud)

eri*_*ict 24

我的2美分:一条路线不是正则表达式.它只是构成路径的变量和静态组件,由段(由斜杠标识)分隔.有一个特殊符号,即最后一个变量中的星号,这意味着从这里开始,忽略segment-separator - 斜杠.所以,

{*url} 
Run Code Online (Sandbox Code Playgroud)

是最简单的路由,因为它意味着获取整个URL,将其放入变量'url',并将其传递给与该路由关联的页面.

{controller}/{action}/{id}
Run Code Online (Sandbox Code Playgroud)

将所有内容放在第一个段 - 直到第一个斜杠 - 放入变量'controller',将所有内容放在第一个和第二个/变量'action'之间,以及第二个和第三个斜杠之间的所有内容(或结束)进入变量'id'.然后将这些变量传递到关联页面.

{resource}.axd/{*pathInfo}
Run Code Online (Sandbox Code Playgroud)

在这里,将.axd /(并且它不能有任何斜杠!)之前的信息放入'resource',并将第一个/之后的所有内容放入'pathInfo'.由于这通常是ignoreRoute,因此它不是将其传递给相关的页面,而是由Stop​​Handler处理,这意味着路由不会处理它,而是由非路由HttpHandler处理.

正如bleevo所说,路线是按照它们被添加到集合中的顺序执行的.因此必须在处理通用路由之前添加IgnoreRoute.

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

具体到你的例子,我会将IgnoreRoute线放在Route添加的上方,因为你的路线实际上是一个全能的.另外,请记住,只有当gif位于根目录中时才会遵守.gif忽略.


ble*_*evo 2

pathinfo 只是一个存储桶的标签。例如,{*pathinfo}将后面的所有内容放入{resource}.axd/路径信息中。

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