ASP.NET MVC框架4.5 CSS包不适用于托管

问题描述 投票:140回答:11

我正在使用MVC 4编写的应用程序端口上运行应用程序。

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

如何解决这个问题?

asp.net-mvc asp.net-mvc-4 appharbor asp.net-optimization
11个回答
281
投票

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

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

来自评论:

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


0
投票

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


0
投票

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


44
投票

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

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

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

B)将它添加到system.webServer部分的web.config中,这将导致.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


19
投票

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

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

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

和文件夹结构是

- 内容

- Content \ Bootstrap \ ...

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


12
投票

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

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

   BundleTable.EnableOptimizations = true;     // Added this           
}

9
投票

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]")


3
投票

我做的很简单,

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

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

应该这样做。


3
投票

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

BundleTable.EnableOptimizations = false;

2
投票

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


1
投票

问题还可能来自加密文件。当我下载BootStrap并使用提供的文件时,就会发生这种情况。它们在Windows资源管理器中显示为绿色并在Visual Studio中运行良好,但在部署时,我收到403错误。

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

取消选中,它将不再是一个问题。

© www.soinside.com 2019 - 2024. All rights reserved.