2012-05-01 89 views
0

我有一个CMS系统,我正在使用路由来获取页面名称。我需要在第一个项目和最后一个项目(页面名称)之间有无限的值(子目录,产品名称,不同的本地化)。ASP.NET URL使用通配符路由

例如:

/产品/电脑/ ComputerType1/

而且

/PRODUCTOS/Ordenadores/ComputerType1/

哪里ComputerType1是页面的名称。

routes.Add(new Route("{*route}/{pageName}", routeHandler)); 

我不能找到一种方法,使中间部分({*}路线)的路线是通配符,以便可以在页面名称前面放子目录的数量不受限制。目前我只能通过使用默认通配符路线来解决此问题,例如:

routes.Add(new Route("{*route}", routeHandler)); 

捕捉所有内容。但是,通配符似乎也甚至你我把它指定为路径代码忽略上面又让GIF网址:

routes.Ignore("{resource}.axd/{*pathInfo}"); 
routes.Ignore("{resource}.asmx/{*pathInfo}"); 
routes.Ignore("{resource}.ashx/{*pathInfo}"); 
routes.Ignore("{resource}.gif/{*pathInfo}"); 
routes.Ignore("{resource}.png/{*pathInfo}"); 
routes.Ignore("{resource}.jpg/{*pathInfo}"); 
routes.Ignore("{resource}.ico/{*pathInfo}"); 
routes.Ignore("{resource}.pdf/{*pathInfo}"); 
routes.Ignore("{resource}.css/{*pathInfo}"); 
routes.Ignore("{resource}.js/{*pathInfo}"); 

是否有这样做的更好的办法?这应该通过一个自定义的路由处理程序来处理?

回答

0

是你应该为这样的
简单的情况下,路由处理程序创建一个classRouteBase
覆盖产生它的GetRouteData方法
这个方法,你可以访问当前httpcontext,因此您可以访问请求URL
所以你可以相应地路由。
欲了解更多定制路线信息,请访问此链接
http://www.codeproject.com/Articles/299531/Custom-routes-for-MVC-Application

+0

自定义路线工作。不过,我仍然遇到了一个通配符路由,它捕获位于“App_Themes/directoryname/images/image1.gif”中的gif文件。 Route.Ignore的路由忽略(“{resource} .gif/{* pathInfo}”);仅在图像位于根目录中时才起作用。我注意到的一件事是图像文件在主题中被引用,但文件不存在于主题中的其他图像文件确实存在并且不试图被路由的地方。我正在考虑添加一个基于“/ App_Themes/{文件夹} .....”的忽略路由。还有其他建议吗? – econner

+0

好吧,它看起来像问题是主题中引用的gif图像,但acutal文件不存在,所以IIS不能忽略“文件”,并将其路由为一个catchall url。 – econner