ASP.NET MVC Framework 4.5 CSS bundle 不能在主机上工作

我运行的应用程序港口应用程序写在 MVC4。

一堆 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-禁止: 访问被拒绝。

如何解决这个问题?

96274 次浏览

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

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

评论中写道:

”创建捆绑包时要遵循的一个很好的约定是包括 “ bundle”作为 bundle 名称的前缀 路由冲突”

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

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

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

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

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

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

大声欢呼吧,雷 · 莫罗,他找到了真正的原因,并在我的博客上与我分享: Http://blog.cdeutsch.com/2012/11/fixing-404-errors-for-aspnet-mvc-apps.html

我有同样的问题与该(403禁止)错误。 在我的情况下,原因是我的组织中的代理服务器阻塞了我的 css 文件。 CSS 文件名匹配块规则之一。

问题还可能来自正在加密的文件。当我下载 BootStrap 并使用提供的文件时,我想到了这个问题。它们在文件资源管理器中显示为绿色,在 Visual Studio 中运行良好,但在部署时,我得到了一个403错误。

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

取消检查,它将不再是一个问题。

403错误解决。这里是对403错误的详细解释和解决方案。
解决方案is 为 CSS bundle 演示。但是它也适用于 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]")匹配

我的工作很简单,

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

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

应该可以了。

当我试图在 AppHarbor 上部署我的 ASP.NET MVC 应用程序时,也发生了同样的事情。

我有一个包含名称的样式表包

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

文件夹结构是

——内容

—— Content Bootstrap..。

通过将捆绑包的名称改为 "~/Content/bootstrap-css",我的问题得到了解决。

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

public static void RegisterBundles(BundleCollection bundles)
{
...


BundleTable.EnableOptimizations = true;     // Added this
}

我发现 bootstrap.css 文件不在 content 文件夹中,所以我在包中寻找它并粘贴到那里。.成功了!

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

BundleTable.EnableOptimizations = false;