【问题标题】:How to ignore all of a particular file extension in MVC routing如何忽略 MVC 路由中的所有特定文件扩展名
【发布时间】:2011-06-08 17:07:49
【问题描述】:

如何配置 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 文件。有什么建议吗?

【问题讨论】:

标签: c# asp.net-mvc routing


【解决方案1】:

查看 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 路由处理程序(实现 IRouteHandler 的类)。实际上,任何 匹配“忽略路由”的请求将被路由忽略,并且 正常的 ASP.NET 处理将基于现有的 http 处理程序进行 映射。

因此,在我们的默认模板中,您会注意到我们有以下内容 路线已定义。

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

这处理标准的 .axd 请求。

........

我们只允许一条包罗万象的路线,并且必须在路线结束时发生 网址。但是,您可以采取以下方法。在这个例子中,我 添加了以下两条路线。

routes.IgnoreRoute("{*allaspx}", new {allaspx=@".*\.aspx(/.*)?"});
routes.IgnoreRoute("{*favicon}", new {favicon=@"(.*/)?favicon.ico(/.*)?"}); 

我在这里做的是 Eilon 向我展示了将所有 URL 映射到这些路由的技术, 然后通过约束限制要忽略的路由 字典。所以在这种情况下,这些路由将匹配(因此忽略) 对 favicon.ico 的所有请求(无论哪个目录)以及 .aspx 文件的请求。因为我们告诉路由忽略这些 请求,这些请求的正常 ASP.NET 处理将发生。

【讨论】:

  • routes.IgnoreRoute("{allflv}", new { allflv = @".*\.flv(/.)?" });
  • @Coelho 如果评论不足以解释,您能否解释一下您的情况或发布一个新问题?
  • 对不起,这里有我的情况,基本是一样的。 stackoverflow.com/questions/10637334/mvc-ignore-route
猜你喜欢
  • 2014-02-14
  • 1970-01-01
  • 2011-03-14
  • 2015-10-25
  • 1970-01-01
  • 2014-04-10
  • 1970-01-01
  • 2013-05-07
  • 1970-01-01
相关资源
最近更新 更多