我正在使用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 - 禁止访问:访问被拒绝。
如何解决这个问题?
我的猜测是你的应用程序在磁盘上存在路径Content/css
。在这种情况下,IIS将处理请求,而不是MVC。
确保bundle的虚拟路径(StyleBundle构造函数的参数)与文件系统中的文件夹不匹配。
来自评论:
“创建捆绑包时要遵循的一个好习惯是在捆绑包名称中包含”bundle“作为前缀。这将防止可能的路由冲突。”
我有同样的问题(403 Forbidden)错误。在我的情况下,原因是我的组织中的代理服务器阻止了我的css文件。 Css文件名与块规则之一匹配。
我发现文件bootstrap.css不在内容文件夹中,所以我在包中找到它并粘贴在那里..它有效!
默认情况下,此问题不会“处理”具有.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
当我尝试在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
}
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]")
我做的很简单,
我在ScriptBundle的末尾添加“js”,如下所示:new ScriptBundle(“〜/ bundles / appjs”)我在StyleBundle的末尾添加“css”,如下所示:new StyleBundle(“〜/ content / appcss”)
我的文件夹名称永远不会以“js”或“css”结尾。
应该这样做。
我通过在BundleConfig类中添加以下代码行解决了这个问题
BundleTable.EnableOptimizations = false;
这也适用于'ScriptBundle类',确保构造函数的'参数名称'与Web应用程序文件系统中的路径不匹配。请记住,IIS将尝试提供文件/请求。
问题还可能来自加密文件。当我下载BootStrap并使用提供的文件时,就会发生这种情况。它们在Windows资源管理器中显示为绿色并在Visual Studio中运行良好,但在部署时,我收到403错误。
您可以通过转到属性,然后转到高级属性来查看它们是否已加密,并且有一个加密的复选框。
取消选中,它将不再是一个问题。