ASP.Net MVC在部署时JS/CSS捆绑无法正常工作

4

我部署了一个小型的ASP.Net MVC 4 Web应用程序。我们已经正确设置了JS/CSS捆绑包,并且在本地工作正常。问题是当我部署到IIS 6服务器时,这些捆绑包似乎无法正常工作。JS/CSS不会下载,当我尝试访问脚本中的JS链接时,会出现404错误。

有没有人将MVC 4部署到IIS 6并使其正常工作?


我想这可能是一个路由问题,我相信你必须对路由设置进行更改才能在IIS6上运行MVC,但我恐怕手头没有详细信息 :( - dougajmcdonald
3个回答

3
问题在于我们作为虚拟目录运行,配置了ASP.Net 4.0,而默认网站配置为ASP.Net 2.0。
我们创建了一个新的网站,并将其设置为asp.net 4.0,一切工作正常。根据Haacked上的帖子,现在大多数IIS 6实例都应该支持无扩展名的URL。

2
这些包通过没有扩展名的URL提供服务,例如: IIS 6不支持无扩展名的URL。当它遇到以/js/css结尾的URL时,它严格没有任何线索表明它必须将此URL与aspnet_isapi.dll处理程序(ASP.NET)相关联。
您可以阅读Phil Haack的博客文章,他在其中解释了如何配置IIS 6以启用ASP.NET MVC的无扩展名URL。这是关于ASP.NET MVC 3的,但对于ASP.NET MVC 4完全适用。
哦,还有您可能考虑升级到IIS 7.0+,在集成管道模式下运行时它默认具备此功能。

1
那个链接假设你有像.axd这样的扩展名作为URL的一部分。但是Bundle确实没有扩展名,所以他说的不起作用。我们已经设置了通配符映射,但也没有帮助。 - Shane Courtrille
@ShaneCourtrille,很不幸的是,我目前无法访问IIS 6服务器进行测试,但我认为通过正确配置无扩展名URL,您应该能够实现这一点。也许您可以尝试在http://serverfault.com上提出问题,因为您的问题似乎更与服务器配置有关,而非编程。 - Darin Dimitrov
不,对我来说,只是没有扩展名也不起作用,不幸的是。我也没有找到解决办法。 - Andrew
我花了一些时间瞎折腾这个,最终还是回归到老式的方式... 直到我们在工作中升级到IIS 7! - Christian Phillips

0
我的问题出现在App_Start文件夹下的BundleConfig.cs文件中。我的BundleConfig.cs文件之前看起来像下面这样:
  bundles.Add(new ScriptBundle("~/Scripts/ui-js").Include(
                                     "~/Scripts/ui-js/jquery.min.1.11.1.js"
                                     , "~/Scripts/ui-js/bootstrap.min.js"
                                     , "~/Scripts/ui-js/bootstrap-slider.js"
                                     , "~/Scripts/ui-js/bootstrap-lightbox.js"
                                     , "~/Scripts/ui-js/common-script.js"
                                     , "~/Scripts/ui-js/html5.js"
                                     , "~/Scripts/ui-js/jquery.colorbox.js"
                                     , "~/Scripts/ui-js/respond.src.js"
                                     , "~/Scripts/ui-js/angular.min.js"
                                     , "~/Scripts/ui-js/bootstrap.js"
                                     ,"~/Scripts/ui-js/jRate.min.js"
                                     , "~/Scripts/ui-js/jcrop.min.js"
                                     ));

我的布局页面有

@Scripts.Render("~/Scripts/ui-js")

在谷歌搜索后,我发现解决方法是无法为新的 ScriptBundle() 虚拟路径使用相同的文件夹结构。所以我将上面的内容更改为:
bundles.Add(new ScriptBundle("~/Scripts/ppScript").Include(
                                     "~/Scripts/ui-js/jquery.min.1.11.1.js"
                                     , "~/Scripts/ui-js/bootstrap.min.js"
                                     , "~/Scripts/ui-js/bootstrap-slider.js"
                                     , "~/Scripts/ui-js/bootstrap-lightbox.js"
                                     , "~/Scripts/ui-js/common-script.js"
                                     , "~/Scripts/ui-js/html5.js"
                                     , "~/Scripts/ui-js/jquery.colorbox.js"
                                     , "~/Scripts/ui-js/respond.src.js"
                                     , "~/Scripts/ui-js/angular.min.js"
                                     , "~/Scripts/ui-js/bootstrap.js"
                                     ,"~/Scripts/ui-js/jRate.min.js"
                                     , "~/Scripts/ui-js/jcrop.min.js"
                                     ));

而在我的布局页面中,我将其称为

@Scripts.Render("~/Scripts/uiScript")

注意:你也需要对你的CSS和modernizr捆绑包执行同样的操作 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接