我想定义一个类似这样的bundle:
bundles.Add(
new StyleBundle("~/style.css").Include(
//...
));
如果包名称只是"~/style"
,那么这个可以工作,但是带有文件扩展名时它总是返回404。我怀疑服务器在驱动器上搜索CSS和JS文件并忽略捆绑系统,但我找不到其他任何试图在捆绑名称中包含文件扩展名的人。是否可能在没有URL重写之类的东西的情况下进行此操作?我想定义一个类似这样的bundle:
bundles.Add(
new StyleBundle("~/style.css").Include(
//...
));
如果包名称只是"~/style"
,那么这个可以工作,但是带有文件扩展名时它总是返回404。我怀疑服务器在驱动器上搜索CSS和JS文件并忽略捆绑系统,但我找不到其他任何试图在捆绑名称中包含文件扩展名的人。是否可能在没有URL重写之类的东西的情况下进行此操作?你可以将以下内容添加到web.config的<system.webServer>
部分中:
<modules runAllManagedModulesForAllRequests="true" />
这将确保对于静态资源,例如.js
和.css
的请求将通过托管模块,并被ASP.NET MVC拦截。
作为启用runAllManagedModulesForAllRequests
的替代方案,您可以仅对需要使用的URL进行配置。所以在<handlers>
中添加以下内容:
<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>
path="*.bundle.js"
,将会阻止处理程序对真实文件的运行。 - Fabio MilheiroUnhandled application error: System.MissingMethodException: Constructor on type 'System.Web.Optimization.BundleHandler'
。显然,BundleHandler没有无参数构造函数。这应该如何工作(即我们依赖哪种行为?) - Johannes Rudolph/x/bundle.js?v=12345
)的情况下。我相信这可以通过一些其他的技巧来解决(并返回适当的404)。 - Johannes Rudolph