ASP.NET MVC Framework 4.5 CSS捆绑不适用于主机


144

我正在用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-禁止访问:访问被拒绝。

如何解决这个问题?


不知道您是否解决了此问题,但是本文修复了我的问题。stackoverflow.com/a/18474844/955831
Jason Foglia

Answers:


284

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

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

从评论:

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


2
谢谢。在本地主机中运行时正常工作吗?
里卡多·波罗·贾拉米洛

3
对此答案表示感谢-让我发疯了!
Rich Turner

8
@RicardoPolo,“本地主机”,您是指在开发计算机上的iis Express上运行它时的意思吗?然后是的,在这里正常工作是正常的,因为您很可能在调试模式下运行,这会禁用捆绑。
bvgheluwe 2014年

1
谢谢你,这让我今天发疯了
星宇2014年

11
+1此答案可帮助我了解虚拟路径如何与捆绑一起使用。我阅读了msdn上的原始帖子(asp.net/mvc/tutorials/mvc-4/bundling-and-minification),但是在解决了您的答案问题后,我发现帖子的末尾有一些关于虚拟的文字路径:“创建捆绑包时要遵循的一个很好的约定是在捆绑包名称中包括“ bundle”作为前缀。这将防止可能的路由冲突。我认为这句话应该用红色/黄色警告图像加粗显示。:D谢谢!
塞缪尔

45

默认情况下,此问题是.NET不会“处理”扩展名为.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


更新了有关根本原因的更多信息以及第二个选项。
cdeutsch

1
我遇到这个问题是因为我的捆绑包名称是一个以“ css”结尾的类似文件夹的名称。尽管我的捆绑包没有确切的文件扩展名,但建议A导致我遇到了问题。
dsnunez 2014年

1
这应该是正确的答案,它可以帮助我解决同样的问题。
psulek

很好的答案对我有帮助
DKR 2015年

这个东西与web.config中缺少的<module>部分不一样,哦……
XDS

19

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

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

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

文件夹结构是

-内容

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

通过仅将包名称更改为"~/Content/bootstrap-css"我的问题即可解决。


15

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

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

   BundleTable.EnableOptimizations = true;     // Added this           
}

2
在上面和下面的所有答案中。这是唯一为我工作的人。
Haim Katz

3
当您处于调试模式时,这将启用优化。虽然这是检查捆绑软件是否在开发机器上工作的好方法,但是您不应将此语句留在代码中。
Rudey

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


2
谢谢,这是我遇到的问题。为了解决这个问题,在BundleConfig.cs中,我将路径从@ Styles.Render(“〜/ Content / css”)更改为@ Styles.Render(“〜/ bundles / css”)。现在,它可以在调试模式下本地运行以及在发布或调试模式下发布时工作。
肯·帕尔默

很好的答复,但您不应该只留下链接,如果链接的网站出现故障,至少可以在此处进行此文章的基本步骤。
Vitor M. Barbosa 2015年

5

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

BundleTable.EnableOptimizations = false;

3

我所做的很简单,

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

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

那应该做。


2

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


1

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

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

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



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.