带有通配符的ASP.NET URL路由

时间:2012-05-01 05:19:19

标签: asp.net url routing wildcard

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

例如:

/产品/计算机/ ComputerType1 /

/ PRODUCTOS / Ordenadores / ComputerType1 /

其中ComputerType1是页面名称。

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

我找不到使路由的中间部分({* route})成为通配符的方法,以便可以在页面名称前面放置无限数量的子目录。目前我只能通过默认的通配符路由来解决这个问题,例如:

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

有更好的方法吗?这应该通过自定义路由处理程序处理吗?

1 个答案:

答案 0 :(得分:1)

是的,你应该为像这样的案件创建一个路由处理程序 简单地创建class并从RouteBase派生出来 覆盖GetRouteData方法
在此方法中,您可以访问当前httpcontext,从而可以访问请求的URL 所以你可以相应地路线 有关自定义路线的更多信息,请访问此链接
http://www.codeproject.com/Articles/299531/Custom-routes-for-MVC-Application