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,因此它不是将其传递给相关的页面,而是由StopHandler处理,这意味着路由不会处理它,而是由非路由HttpHandler处理.
正如bleevo所说,路线是按照它们被添加到集合中的顺序执行的.因此必须在处理通用路由之前添加IgnoreRoute.
这是马的嘴:http://msdn.microsoft.com/en-us/library/cc668201.aspx
具体到你的例子,我会将IgnoreRoute线放在Route添加的上方,因为你的路线实际上是一个全能的.另外,请记住,只有当gif位于根目录中时才会遵守.gif忽略.
pathinfo 只是一个存储桶的标签。例如,{*pathinfo}将后面的所有内容放入{resource}.axd/路径信息中。
路由按照您在路由表中放置的顺序执行,因此如果您的第一个路由是 catch,则所有其余路由将永远不会执行。