2011-10-10 15 views

回答

23

您需要为不希望通过ASP.NET MVC提供服务的特定类型的文件创建忽略路由。

将以下内容添加到您的路由中,以查看要忽略的文件类型。

下工作的文件根:如果您想将这些组合成

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

routes.IgnoreRoute("{file}.css"); 
routes.IgnoreRoute("{file}.jpg"); 
routes.IgnoreRoute("{file}.gif"); 

如果你想在一个特定的目录忽略的文件,你可以这样做一个路由,你可以(例如忽略目录中特定类型的文件):

routes.IgnoreRoute("{assets}", new { assets = @".*\.(css|js|gif|jpg)(/.)?" }); 

这个overload of IgnoreRoute接受一个url(第一个参数)和一个要忽略的事物的Constraints对象。

由于ASP.NET MVC中的RouteConstraints可以通过多种方式实现(包括正则表达式),所以可以在第二个参数中放置标准正则表达式。

如果你想实现一个自定义约束,there is lots of useful documentation on that subject(比如,如果你的约束在运行时是动态的)。

+0

为什么你只是做routes.RouteExistingFiles = FALSE;它不应该为存在的文件工作吗? –

2

在方法开始Global.asax.csRegisterRoutes写:

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

包含你的静态文件的文件夹的名称替换Content

乔治,但是,提供More comprehensive solution

6

静态文件不是由ASP.NET MVC处理,除非你有一个静态文件的URL匹配的路由。也许你在问关于ASP.NET处理的静态文件,在这种情况下,你不应该使用runAllManagedModulesForAllRequests="true"。这是一个post与更多的信息。

15

请注意,@ george-stocker的答案仅适用于根目录下的静态文件

为了赶上静态文件中的所有可能的目录/子目录,使用忽略与“条件”的规则,就像这样:

routes.IgnoreRoute("{*allfiles}", new { allfiles = @".*\.(css|js|gif|jpg|png)" }); 
+0

这个问题不明确,但对于我忽略文件扩展名往往意味着你想在全球范围内做到这一点(包括子目录)。这个答案完成了,而接受的答案没有。 –

相关问题