按照老A书上讲的,GetRouteData首先会提取request中的请求uri,切割下。如http://www.abc.com/a/b/c被切割成真实路径/a/b/c。然后跟virtualPathRoot去进行匹配,这里设置virtualPathRoot为/a/,若真实路径是以virtualPathRoot为前缀的话,则第一步匹配成功,否则直接返回null。然后会去掉该前缀,即现在路径变为 /b/c ,再去匹配route自身的路由规则,这里route的路由规则设置为/b/{controller},若匹配成功,返回非null对象。
遇到的问题是:我实际调试后发现,第一步匹配成功后,不会去掉该前缀。且若第一步匹配失败也不会直接返回null。或者说GetRouteData的第一个参数virtualPathRoot根本不起作用。求解惑