【问题标题】:Is there any way to have a file extension in a bundle name?有没有办法在包名中添加文件扩展名?
【发布时间】:2012-10-07 13:00:59
【问题描述】:

我想定义一个这样的包:

bundles.Add(
    new StyleBundle("~/style.css").Include(
        //...
));

如果捆绑名称只是"~/style",则可以,但文件扩展名总是返回 404。我怀疑服务器在驱动器上搜索 CSS 和 JS 文件并忽略捆绑系统,但我不能找到任何其他试图在包名称中包含文件扩展名的人。如果没有 URL 重写之类的东西,这可能吗?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 asp.net-optimization bundling-and-minification


    【解决方案1】:

    您可以将以下内容添加到 web.config 中的 <system.webServer> 部分:

    <modules runAllManagedModulesForAllRequests="true" />
    

    这将确保对.js.css等静态资源的请求将通过托管模块并被ASP.NET MVC拦截。

    作为对所有请求启用runAllManagedModulesForAllRequests 的替代方法,您可以仅为需要使用的网址配置它们。所以在&lt;handlers&gt; 里面添加以下内容:

    <handlers>
        <!-- ... -->
        <add name="scriptBundle" verb="*" path="script.js" type="System.Web.Optimization.BundleHandler, System.Web.Optimization" preCondition="managedHandler" />
        <add name="cssBundle" verb="*" path="style.css" type="System.Web.Optimization.BundleHandler, System.Web.Optimization" preCondition="managedHandler" />
    </handlers>
    

    【讨论】:

    • 嗯,有没有更温和的解决方案,只会影响 .js 和 .css 文件?
    • +1 但拥有path="*.bundle.js" 将阻止处理程序运行真实文件。
    • 我想知道第二种解决方案(添加单个处理程序)是否有一些缺点。它在某些情况下似乎确实有效,但我也偶尔在我们的日志中看到类似Unhandled application error: System.MissingMethodException: Constructor on type 'System.Web.Optimization.BundleHandler' 的错误。当然,BundleHandler 没有无参数构造函数。这应该如何工作(即 qe 依赖于哪种行为?)
    • 重新。我之前的评论,我已经确认异常发生在指向正确捆绑路径但捆绑版本参数错误的请求(例如/x/bundle.js?v=12345)。我确信这可以通过其他一些技巧来解决(并返回正确的 404)......
    猜你喜欢
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 2016-12-24
    相关资源
    最近更新 更多