【发布时间】:2011-10-10 16:37:41
【问题描述】:
会不会是asp.net mvc引擎不处理静态文件?
我可以在 IIS 级别执行此操作吗? (当然不用为静态文件创建单独的 IIS 网站)
【问题讨论】:
标签: c# asp.net-mvc
会不会是asp.net mvc引擎不处理静态文件?
我可以在 IIS 级别执行此操作吗? (当然不用为静态文件创建单独的 IIS 网站)
【问题讨论】:
标签: c# asp.net-mvc
您需要为不希望通过 ASP.NET MVC 提供服务的特定类型的文件创建忽略路由。
为您想要忽略的文件类型添加以下内容。
以下适用于根目录中的文件:
routes.IgnoreRoute("{file}.css");
routes.IgnoreRoute("{file}.jpg");
routes.IgnoreRoute("{file}.gif");
如果你想忽略特定目录中的文件,你可以这样做:
routes.IgnoreRoute("assets/{*pathInfo}");
如果你想将这些组合成一个路由,你可以(例如,忽略目录中特定类型的文件):
routes.IgnoreRoute("{assets}", new { assets = @".*\.(css|js|gif|jpg)(/.)?" });
这个overload of IgnoreRoute 接受一个url(第一个参数)和一个要忽略的约束对象。
由于 ASP.NET MVC 中的 RouteConstraints 可以多种方式实现(包括正则表达式),您可以将标准正则表达式放在第二个参数中。
如果您想实现自定义约束,there is lots of useful documentation on that subject(例如,如果您的约束在运行时是动态的)。
【讨论】:
请注意,@george-stocker 的回答适用于仅在根目录中的静态文件!!!
要捕获所有可能的目录/子目录中的静态文件,请使用带有“条件”的忽略规则,如下所示:
routes.IgnoreRoute("{*allfiles}", new { allfiles = @".*\.(css|js|gif|jpg|png)" });
【讨论】:
ASP.NET MVC 不会处理静态文件,除非您有与静态文件的 URL 匹配的路由。也许你问的是 ASP.NET 处理的静态文件,在这种情况下你不应该使用runAllManagedModulesForAllRequests="true"。这是post,提供更多信息。
【讨论】:
在Global.asax.cs方法开头的RegisterRoutes写下:
routes.IgnoreRoute("Content/{*pathInfo}");
将Content 替换为包含您的静态文件的文件夹的名称。
然而,乔治提供了More comprehensive solution
【讨论】: