我在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);
解决方法
我的2美分:
路由不是正则表达式。它只是组成路由的变量和静态组件,由段(由斜杠标识)分隔。有一个特殊符号,最后一个变量中的星号,这意味着从这里,忽略段分隔符 – 斜杠。所以,
路由不是正则表达式。它只是组成路由的变量和静态组件,由段(由斜杠标识)分隔。有一个特殊符号,最后一个变量中的星号,这意味着从这里,忽略段分隔符 – 斜杠。所以,
{*url}
是最简单的路由,因为它意味着取整个URL,将其放入变量“url”,并将其传递到与该路由相关联的页面。
{controller}/{action}/{id}
将所有内容都放在第一个分段(第一个斜杠)到变量“controller”中,将第一个和第二个之间的所有内容放在变量“action”中,第二个和第三个斜杠(或结束)之间的所有内容,进入变量’id’。然后将这些变量传递到关联页面。
{resource}.axd/{*pathInfo}
这里把信息放在.axd /(它不能有任何斜线!)到’资源’,并把所有的第一个/进入’pathInfo’。由于这通常是一个ignoreRoute,所以不是将其传递给关联的页面,而是由StopHandler处理,这意味着路由将不会处理它,而是由非路由HttpHandler处理。
如bleevo所说,路由被执行,以便它们被添加到集合中。所以在处理通用路由之前必须添加IgnoreRoute。
这是马的嘴:http://msdn.microsoft.com/en-us/library/cc668201.aspx
具体到你的例子,我会把IgnoreRoute行放在你的路线之上,因为你的路由实际上是一个全部的。另外,请记住.gif忽略只有在gif位于根目录下才能被保证。