【问题标题】:ASP.NET URL Routing with wildcard带有通配符的 ASP.NET URL 路由
【发布时间】:2012-05-10 18:06:15
【问题描述】:

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

例如:

/产品/计算机/ComputerType1/

/Productos/Ordenadores/ComputerType1/

其中 ComputerType1 是页面名称。

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

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

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

捕捉一切。但是,即使您在上面的路由代码中将其指定为忽略,通配符似乎也允许输入 gif url:

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

有没有更好的方法来做到这一点?这应该通过自定义路由处理程序来处理吗?

【问题讨论】:

    标签: asp.net url routing wildcard


    【解决方案1】:

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

    【讨论】:

    • 自定义路由正在运行。但是,我仍然遇到通配符路由捕获位于“App_Themes/directoryname/images/image1.gif”中的 gif 文件的问题。 routes.Ignore("{resource}.gif/{*pathInfo}"); 的路由忽略仅当图像位于根目录中时才有效。我注意到的一件事是在主题中引用了图像文件,但该文件不存在,而主题中的其他图像文件确实存在并且没有尝试路由。我正在考虑添加基于“/App_Themes/{folder} .....”的路由忽略。还有其他建议吗?
    • 好的,看起来问题是在主题中引用了 gif 图像,但实际文件不存在,因此 IIS 无法忽略“文件”并将其作为包罗万象的 url 路由。
    猜你喜欢
    • 1970-01-01
    • 2014-12-01
    • 2017-07-15
    • 2015-12-26
    • 2010-12-07
    • 2015-06-22
    • 2017-11-27
    • 1970-01-01
    • 2012-08-26
    相关资源
    最近更新 更多