【问题标题】:ASP.NET MVC framework 4.5 CSS bundle does not work on the hostingASP.NET MVC 框架 4.5 CSS 包在主机上不起作用
【发布时间】:2012-08-22 20:52:55
【问题描述】:

我正在用 MVC4 编写的 app Harbor 上运行一个应用程序。

一堆 css 文件不起作用。在调试模式下的本地计算机中,我看到了应用程序的代码,并看到了文件。该应用程序按预期工作。

<link href="/Content/css/home/basic-jquery-slider.css" rel="stylesheet"/>
<link href="/Content/css/home/Home.css" rel="stylesheet"/>

当我将应用程序上传到 Appharbor 时,我在代码中看到了捆绑包,但应用程序无法运行。

<link href="/Content/css/home?v=zhVOIpUNuvCOZhJyBcQWpMlozayor4te6k-pM29wHqI1" rel="stylesheet"/>

当我浏览 href 中的链接时,我得到 403 - Forbidden: Access is denied.

如何解决这个问题?

【问题讨论】:

标签: asp.net-mvc asp.net-mvc-4 appharbor asp.net-optimization


【解决方案1】:

我的猜测是路径 Content/css 存在于您的应用程序的磁盘上。在这种情况下,IIS 将处理请求,而不是 MVC。

确保包的虚拟路径(StyleBundle 构造函数的参数)与文件系统中的文件夹不匹配。

来自cmets:

“创建捆绑包时要遵循的一个很好的约定是包含 “捆绑”作为捆绑名称中的前缀。这将防止可能的 路由冲突。”

【讨论】:

  • 谢谢。在localhost中运行正常吗?
  • 感谢这个答案 - 快把我逼疯了!
  • @RicardoPolo,通过“localhost”,您是指在开发机器上的 iis express 上运行它吗?那么是的,它在那里工作是正常的,因为您很可能在调试模式下运行,这会禁用捆绑。
  • 谢谢,今天让我发疯了
  • +1 这个答案帮助我了解虚拟路径如何与捆绑一起工作。我在 msdn (asp.net/mvc/tutorials/mvc-4/bundling-and-minification) 上阅读了原始帖子,但在用您的回答解决了我的问题后,我在帖子末尾发现了一些关于虚拟路径的文字:“创建捆绑包时要遵循的一个很好的约定是包含“捆绑”作为捆绑名称中的前缀。这将防止可能的路由冲突。“。我认为这句话应该用红色/黄色警告图像加粗。 :D 谢谢!
【解决方案2】:

默认情况下,此问题是 .NET 不会“处理”具有 .js 或 .css 扩展名的请求。

对此有两个修复(您只需要做一个)

A) 从捆绑包名称中删除扩展名。 (推荐)这将导致 .NET 处理请求并通过 BundleModule 运行它。

B) 将此添加到您的 web.config 中的 system.webServer 部分,这将导致 .NET 通过 BundleModule 运行 .js 和 .css 请求。

<modules runAllManagedModulesForAllRequests="true">
  <remove name="BundleModule" />
  <add name="BundleModule" type="System.Web.Optimization.BundleModule" />
</modules>

向找到真正原因并在我的博客上与我分享的 Ray Moro 大声喊叫: http://blog.cdeutsch.com/2012/11/fixing-404-errors-for-aspnet-mvc-apps.html

【讨论】:

  • 更新了有关根本原因的更多信息以及第二个选项。
  • 我遇到了这个问题,因为我的包的名称是以“css”结尾的类似文件夹的名称。虽然我的捆绑包没有确切的文件扩展名,但建议 A 导致我遇到了问题。
  • 这应该是正确的答案,它可以帮助我解决同样的问题。
  • 很好的答案对我有帮助
  • 这个东西缺少来自 web.config 的 部分哦,伙计...
【解决方案3】:

当我尝试在 AppHarbor 上部署我的 ASP.NET MVC 应用程序时,我也遇到了这种情况。

我有一个样式表包,名称为

@Styles.Render("~/Content/bootstrap")

文件夹结构是

-- 内容

-- 内容\引导程序\ ...

只需将包名称更改为"~/Content/bootstrap-css",我的问题就得到了解决。

【讨论】:

    【解决方案4】:

    我知道这个问题迟到了 4 年,但这对我有用。

    public static void RegisterBundles(BundleCollection bundles)
    {
       ...
    
       BundleTable.EnableOptimizations = true;     // Added this           
    }
    

    【讨论】:

    • 在上面和下面的所有答案中。这是唯一对我有用的。
    • 这会在您处于调试模式时启用优化。虽然这是检查包是否在开发机器上工作的好方法,但您不应该在代码中保留此语句。
    【解决方案5】:

    403 错误已解决。这里是 403 错误的详细解释和解决方案。
    The solution演示了 CSS 捆绑包。但是它也适用于 JavaScript。

    http://www.mvccentral.net/Story/Details/articles/kahanu/stylebundle-403-error-solved

    简而言之,确保虚拟路径 [Script | Style]Bundle("~/content/[script | css]") 与文件系统中的文件夹(例如 C:\approot\Content\[script | css])不匹配,而是 [Script | Style]Bundle("~/content/[scriptDiff | cssDiff]")

    【讨论】:

    • 谢谢,这是我遇到的问题。为了解决这个问题,我在 BundleConfig.cs 中将路径从 @Styles.Render("~/Content/css") 更改为 @Styles.Render("~/bundles/css")。现在它可以在本地以调试模式运行以及在发布或调试模式下发布时工作。
    • 很好的回复,但你不应该只留下一个链接,至少这篇文章的基本步骤在这里会很好,以防链接的网站关闭。
    【解决方案6】:

    我通过在 BundleConfig 类中添加以下代码行解决了这个问题

    BundleTable.EnableOptimizations = false;
    

    【讨论】:

      【解决方案7】:

      我做的很简单,

      我在 ScriptBundle 的末尾添加“js”,如下所示: new ScriptBundle("~/bundles/appjs") 我在 StyleBundle 的末尾添加“css”,如下所示: new StyleBundle("~/content/appcss")

      我的文件夹名称从不以“js”或“css”结尾。

      应该可以的。

      【讨论】:

        【解决方案8】:

        这也适用于“ScriptBundle 类”,确保构造函数的“参数名称”与 Web 应用程序文件系统中的路径不匹配。请记住,IIS 将尝试提供文件/请求。

        【讨论】:

          【解决方案9】:

          问题也可能来自被加密的文件。当我下载 BootStrap 并使用提供的文件时,这发生在我身上。它们在 Windows 资源管理器中显示为绿色,在 Visual Studio 中运行良好,但在部署时出现 403 错误。

          您可以通过转到属性查看它们是否已加密,然后转到高级属性并有一个加密复选框。

          取消勾选就不会再有问题了。

          【讨论】:

            【解决方案10】:

            我对那个(403 Forbidden)错误有同样的问题。 就我而言,原因是我组织中的代理服务器阻止了我的 css 文件。 Css 文件名与阻止规则之一匹配。

            【讨论】:

              【解决方案11】:

              我发现文件 bootstrap.css 不在内容文件夹中,所以我在包中查找它并粘贴在那里.. 它有效!

              【讨论】:

                猜你喜欢
                • 2018-09-27
                • 2012-06-30
                • 2017-11-10
                • 2014-07-28
                • 1970-01-01
                • 1970-01-01
                • 2013-10-04
                • 2011-04-29
                • 2010-11-25
                相关资源
                最近更新 更多