Sco*_*ott 5 c# asp.net-mvc routing
如何配置IgnoreRoute以忽略具有特定扩展名的所有文件,无论它们位于哪个目录中?
如果我这样做,一切正常,我的Flash电影将被播放:
routes.Ignore("community/123/plan/456/video/moviename.flv");
Run Code Online (Sandbox Code Playgroud)
所以"123"和"456"部分是可变的,可以是任何整数.显然,我不想为每部电影做其中一部分或者我是否需要用可变占位符替换123和456.这只是一种目录的一个例子,整个应用程序中都存储了Flash影片,因此我需要的是IgnoreRoute值,它将忽略具有.flv扩展名的文件,无论它们位于层次结构中的哪个位置.
我尝试过以下方法:
routes.IgnoreRoute("{file}.flv");
routes.IgnoreRoute("(.*).flv(.*)"); // Yeah I know, I'm horrible at RegEx
Run Code Online (Sandbox Code Playgroud)
到目前为止,我唯一可以开始工作的是专门传递FLV文件的完整相对路径.有什么建议?
请查看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的类).实际上,路由将忽略与"忽略路由"匹配的任何请求,并且将基于现有的http处理程序映射进行正常的ASP.NET处理.
因此,在我们的默认模板中,您会注意到我们定义了以下路径.
Run Code Online (Sandbox Code Playgroud)routes.IgnoreRoute("{resource}.axd/{*pathInfo}");这会处理标准的.axd请求.
........
我们只允许一个catch-all路由,它必须发生在URL的末尾.但是,您可以采取以下方法.在这个例子中,我添加了以下两个路由.
Run Code Online (Sandbox Code Playgroud)routes.IgnoreRoute("{*allaspx}", new {allaspx=@".*\.aspx(/.*)?"}); routes.IgnoreRoute("{*favicon}", new {favicon=@"(.*/)?favicon.ico(/.*)?"});我在这里做的是Eilon向我展示的一种技术,即将所有URL映射到这些路由,然后通过约束字典限制忽略哪些路由.因此,在这种情况下,这些路由将匹配(并因此忽略)对favicon.ico的所有请求(无论哪个目录)以及对.aspx文件的请求.由于我们告诉路由忽略这些请求,因此将发生这些请求的正常ASP.NET处理.
| 归档时间: |
|
| 查看次数: |
4443 次 |
| 最近记录: |