如何使所有静态文件如css/images/js文件不被asp.net mvc处理?

Bla*_*man 15 c# asp.net-mvc

是否有可能asp.net mvc引擎无法处理静态文件?

我可以在IIS级别执行此操作吗?(没有为静态文件创建一个单独的IIS网站)

Geo*_*ker 30

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

对于要忽略的文件类型,将以下内容添加到路由中.

以下适用于根目录中的文件:

routes.IgnoreRoute("{file}.css");
routes.IgnoreRoute("{file}.jpg");
routes.IgnoreRoute("{file}.gif");
Run Code Online (Sandbox Code Playgroud)

如果要忽略特定目录中的文件,可以执行以下操作:

routes.IgnoreRoute("assets/{*pathInfo}");
Run Code Online (Sandbox Code Playgroud)

如果要将这些组合成一个路径,则可以(例如,忽略目录中的特定类型的文件):

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

这个重载IgnoreRoute接受一个url(第一个参数)和一个要忽略的事物的Constraints对象.

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

如果要实现自定义约束,那么有很多关于该主题的有用文档(例如,如果您的约束在运行时是动态的).


Ale*_*lex 21

小心,@ george-stocker的答案仅适用于根目录中的静态文件!

要捕获所有可能的目录/子目录中的静态文件,请使用带有"条件"的忽略规则,如下所示:

routes.IgnoreRoute("{*allfiles}", new { allfiles = @".*\.(css|js|gif|jpg|png)" });
Run Code Online (Sandbox Code Playgroud)


Max*_*oro 9

除非您的路由与静态文件的URL匹配,否则ASP.NET MVC不会处理静态文件.也许你问的是ASP.NET处理的静态文件,在这种情况下你不应该使用runAllManagedModulesForAllRequests="true".这是一篇包含更多信息的帖子.