145

我正在用 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 - Forbidden: Access is denied中浏览该链接时。

如何解决这个问题?

4

11 回答 11

287

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

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

从评论:

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

于 2012-08-22T22:22:49.060 回答
46

默认情况下,此问题是 .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

于 2012-11-28T03:07:20.173 回答
20

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

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

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

文件夹结构是

- 内容

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

只需将捆绑名称更改为"~/Content/bootstrap-css"我的问题即可解决。

于 2015-01-30T07:22:22.683 回答
15

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

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

   BundleTable.EnableOptimizations = true;     // Added this           
}
于 2016-03-29T20:17:11.953 回答
9

403 错误已解决。这是403错误的详细解释和解决方案。
该解决方案 针对 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]")

于 2014-04-18T18:01:31.873 回答
5

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

BundleTable.EnableOptimizations = false;
于 2018-09-17T14:30:15.747 回答
3

我做的很简单,

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

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

那应该这样做。

于 2014-06-24T17:43:50.930 回答
2

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

于 2012-10-30T22:17:35.077 回答
1

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

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

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

于 2014-03-08T02:32:49.490 回答
0

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

于 2013-12-23T10:10:10.567 回答
0

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

于 2016-12-23T17:04:17.403 回答