【问题标题】:How to make all static files like css/images/js files not be processed by asp.net mvc?如何使asp.net mvc不处理css/images/js文件等所有静态文件?
【发布时间】:2011-10-10 16:37:41
【问题描述】:

会不会是asp.net mvc引擎不处理静态文件?

我可以在 IIS 级别执行此操作吗? (当然不用为静态文件创建单独的 IIS 网站)

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    您需要为不希望通过 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(例如,如果您的约束在运行时是动态的)。

    【讨论】:

    • 为什么只能做 routes.RouteExistingFiles = false;它不应该适用于确实存在的文件吗?
    【解决方案2】:

    请注意,@george-stocker 的回答适用于仅在根目录中的静态文件!!!

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

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

    【讨论】:

    • 这个问题模棱两可,但对我来说,忽略文件扩展名往往意味着你想在全局范围内执行此操作(包括子目录)。这个答案实现了这一点,而接受的答案却没有。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      Global.asax.cs方法开头的RegisterRoutes写下:

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

      Content 替换为包含您的静态文件的文件夹的名称。

      然而,乔治提供了More comprehensive solution

      【讨论】:

        猜你喜欢
        • 2015-09-12
        • 2017-12-21
        • 2014-03-19
        • 2011-11-11
        • 2016-01-21
        • 2012-10-14
        • 1970-01-01
        • 1970-01-01
        • 2011-12-19
        相关资源
        最近更新 更多