Sitecore 8、.NET 4.6、捆绑包返回 404
Sitecore 8, .NET 4.6, Bundles Returning 404
我是 运行 .NET 4.6 上的 Sitecore 8(更新 5)并且 运行 遇到 Bundle 返回 404 错误的问题。
我的布局视图:
@using Sitecore.Mvc.Presentation
@using Sitecore.Mvc
@model RenderingModel
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>@Model.Item.Fields["Title"]</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css">
</head>
<body>
<h1>@Html.Sitecore().Field("Title")</h1>
@Html.Sitecore().Placeholder("content")
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js" type="text/javascript"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js" type="text/javascript" defer="defer"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
@Scripts.RenderFormat("<script type=\"text/javascript\" src=\"{0}\" defer=\"defer\"></script>", "~/bundles/scripts/footer")
</body>
</html>
我的/Global.asax.cs文件:
using System.Web.Mvc;
using System.Web.Optimization;
using Glass.Mapper.Sc;
namespace Sitecore.Web
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
protected void Application_BeginRequest()
{
Sitecore.Context.Items["Disable"] = new VersionCountDisabler();
}
}
}
我的/App_Start/BundleConfig.cs文件:
using System.Web.Optimization;
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/scripts/footer").Include(
"~/Assets/js/jquery.validate.js",
"~/Assets/js/additional-methods.js",
"~/Assets/js/form.js",
"~/Assets/js/marketo.js"
));
#if DEBUG
BundleTable.EnableOptimizations = false;
#else
BundleTable.EnableOptimizations = true;
#endif
}
}
我的 /Web.config:
的 <system.webServer>/modules
部分
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
<add type="Sitecore.Web.RewriteModule, Sitecore.Kernel" name="SitecoreRewriteModule" />
<add type="Sitecore.Nexus.Web.HttpModule,Sitecore.Nexus" name="SitecoreHttpModule" />
<add type="Sitecore.Resources.Media.UploadWatcher, Sitecore.Kernel" name="SitecoreUploadWatcher" />
<add type="Sitecore.IO.XslWatcher, Sitecore.Kernel" name="SitecoreXslWatcher" />
<add type="Sitecore.IO.LayoutWatcher, Sitecore.Kernel" name="SitecoreLayoutWatcher" />
<add type="Sitecore.Configuration.ConfigWatcher, Sitecore.Kernel" name="SitecoreConfigWatcher" />
<remove name="Session" />
<add name="Session" type="System.Web.SessionState.SessionStateModule" preCondition="" />
<add type="Sitecore.Analytics.RobotDetection.Media.MediaRequestSessionModule, Sitecore.Analytics.RobotDetection" name="MediaRequestSessionModule" />
<add type="Sitecore.Web.HttpModule,Sitecore.Kernel" name="SitecoreHttpModuleExtensions" />
<add name="SitecoreAntiCSRF" type="Sitecore.Security.AntiCsrf.SitecoreAntiCsrfModule, Sitecore.Security.AntiCsrf" />
<remove name="BundleModule"/>
<add type="System.Web.Optimization.BundleModule" name="BundleModule"/>
</modules>
最后,/sitecore/admin/showconfig.aspx 显示的 IgnoreUrlPrefixes 设置显示 /bundles 包含在列表中:
<!--
IGNORE URLS
Set IgnoreUrlPrefixes to a '|' separated list of url prefixes that should not be
regarded and processed as friendly urls (ie. forms etc.)
-->
<setting name="IgnoreUrlPrefixes" value="/sitecore/default.aspx|/trace.axd|/webresource.axd|/sitecore/shell/Controls/Rich Text Editor/Telerik.Web.UI.DialogHandler.aspx|/sitecore/shell/applications/content manager/telerik.web.ui.dialoghandler.aspx|/sitecore/shell/Controls/Rich Text Editor/Telerik.Web.UI.SpellCheckHandler.axd|/Telerik.Web.UI.WebResource.axd|/sitecore/admin/upgrade/|/layouts/testing|/bundles|/Assets"/>
更新: 请参阅下面已接受的答案。
实验时间:
- 删除编译器指令。
<compilation debug="true|false">
应该在运行时控制它。
- 删除您的 web.config
<module>
条目。我发现即使是 Sitecore 7.2 项目也不需要这样做。
我发现了问题所在。我的 Global.asax 标记的 "inherits" 属性与 Global.asax.cs 中的 class 名称不匹配。
我是 运行 .NET 4.6 上的 Sitecore 8(更新 5)并且 运行 遇到 Bundle 返回 404 错误的问题。
我的布局视图:
@using Sitecore.Mvc.Presentation
@using Sitecore.Mvc
@model RenderingModel
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>@Model.Item.Fields["Title"]</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css">
</head>
<body>
<h1>@Html.Sitecore().Field("Title")</h1>
@Html.Sitecore().Placeholder("content")
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js" type="text/javascript"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js" type="text/javascript" defer="defer"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
@Scripts.RenderFormat("<script type=\"text/javascript\" src=\"{0}\" defer=\"defer\"></script>", "~/bundles/scripts/footer")
</body>
</html>
我的/Global.asax.cs文件:
using System.Web.Mvc;
using System.Web.Optimization;
using Glass.Mapper.Sc;
namespace Sitecore.Web
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
protected void Application_BeginRequest()
{
Sitecore.Context.Items["Disable"] = new VersionCountDisabler();
}
}
}
我的/App_Start/BundleConfig.cs文件:
using System.Web.Optimization;
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/scripts/footer").Include(
"~/Assets/js/jquery.validate.js",
"~/Assets/js/additional-methods.js",
"~/Assets/js/form.js",
"~/Assets/js/marketo.js"
));
#if DEBUG
BundleTable.EnableOptimizations = false;
#else
BundleTable.EnableOptimizations = true;
#endif
}
}
我的 /Web.config:
的<system.webServer>/modules
部分
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
<add type="Sitecore.Web.RewriteModule, Sitecore.Kernel" name="SitecoreRewriteModule" />
<add type="Sitecore.Nexus.Web.HttpModule,Sitecore.Nexus" name="SitecoreHttpModule" />
<add type="Sitecore.Resources.Media.UploadWatcher, Sitecore.Kernel" name="SitecoreUploadWatcher" />
<add type="Sitecore.IO.XslWatcher, Sitecore.Kernel" name="SitecoreXslWatcher" />
<add type="Sitecore.IO.LayoutWatcher, Sitecore.Kernel" name="SitecoreLayoutWatcher" />
<add type="Sitecore.Configuration.ConfigWatcher, Sitecore.Kernel" name="SitecoreConfigWatcher" />
<remove name="Session" />
<add name="Session" type="System.Web.SessionState.SessionStateModule" preCondition="" />
<add type="Sitecore.Analytics.RobotDetection.Media.MediaRequestSessionModule, Sitecore.Analytics.RobotDetection" name="MediaRequestSessionModule" />
<add type="Sitecore.Web.HttpModule,Sitecore.Kernel" name="SitecoreHttpModuleExtensions" />
<add name="SitecoreAntiCSRF" type="Sitecore.Security.AntiCsrf.SitecoreAntiCsrfModule, Sitecore.Security.AntiCsrf" />
<remove name="BundleModule"/>
<add type="System.Web.Optimization.BundleModule" name="BundleModule"/>
</modules>
最后,/sitecore/admin/showconfig.aspx 显示的 IgnoreUrlPrefixes 设置显示 /bundles 包含在列表中:
<!--
IGNORE URLS
Set IgnoreUrlPrefixes to a '|' separated list of url prefixes that should not be
regarded and processed as friendly urls (ie. forms etc.)
-->
<setting name="IgnoreUrlPrefixes" value="/sitecore/default.aspx|/trace.axd|/webresource.axd|/sitecore/shell/Controls/Rich Text Editor/Telerik.Web.UI.DialogHandler.aspx|/sitecore/shell/applications/content manager/telerik.web.ui.dialoghandler.aspx|/sitecore/shell/Controls/Rich Text Editor/Telerik.Web.UI.SpellCheckHandler.axd|/Telerik.Web.UI.WebResource.axd|/sitecore/admin/upgrade/|/layouts/testing|/bundles|/Assets"/>
更新: 请参阅下面已接受的答案。
实验时间:
- 删除编译器指令。
<compilation debug="true|false">
应该在运行时控制它。 - 删除您的 web.config
<module>
条目。我发现即使是 Sitecore 7.2 项目也不需要这样做。
我发现了问题所在。我的 Global.asax 标记的 "inherits" 属性与 Global.asax.cs 中的 class 名称不匹配。