如何配置IgnoreRoute以忽略具有特定扩展名的所有文件,无论它们位于哪个目录中?
如果我这样做,一切正常,我的Flash电影就会播放:
routes.Ignore("community/123/plan/456/video/moviename.flv");
因此“123”和“456”部分是可变的,可以是任何整数。显然,我不想为每部电影做其中一部分或者我是否需要用可变占位符替换123和456。这只是一种目录的一个例子,整个应用程序中都存储了Flash影片,因此我需要的是IgnoreRoute值,它将忽略具有.flv扩展名的文件,无论它们位于层次结构的哪个位置
我尝试了以下内容:
routes.IgnoreRoute("{file}.flv");
routes.IgnoreRoute("(.*).flv(.*)"); // Yeah I know, I'm horrible at RegEx
到目前为止我唯一可以开始工作的是专门传递FLV文件的完整相对路径。有什么建议吗?
答案 0 :(得分:6)
由Phil Haack检查这篇文章:http://haacked.com/archive/2008/07/14/make-routing-ignore-requests-for-a-file-extension.aspx
长话短说,我们不希望路由尝试路由请求 对于静态文件,如图像。不幸的是,这导致了我们 当我们记得ASP.NET的许多功能时,我们会头疼 对磁盘上不存在的.axd文件的请求。
为了解决这个问题,我们在RouteCollection上添加了一个新的扩展方法, IgnoreRoute,创建一个映射到StopRoutingHandler的Route route handler(实现IRouteHandler的类)。实际上,任何 路由和将忽略匹配“忽略路由”的请求 正常的ASP.NET处理将基于现有的http处理程序进行 映射。
因此,在我们的默认模板中,您会注意到我们有以下内容 路线定义。
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
它处理标准的.axd请求。
........
我们只允许一条全能路线,而且必须在路线结束时发生 URL。但是,您可以采取以下方法。在这个例子中,我 增加了以下两条路线。
routes.IgnoreRoute("{*allaspx}", new {allaspx=@".*\.aspx(/.*)?"}); routes.IgnoreRoute("{*favicon}", new {favicon=@"(.*/)?favicon.ico(/.*)?"});
我在这里做的是一个 技术Eilon向我展示了将所有URL映射到这些路由, 但是然后通过约束限制忽略哪些路由 字典。所以在这种情况下,这些路线将匹配(从而忽略) 所有对favicon.ico的请求(无论哪个目录)以及 请求.aspx文件。因为我们告诉路由忽略这些 请求,将发生这些请求的正常ASP.NET处理。