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-許可されていません:アクセスが拒否されました。
これをトラブルシューティングする方法は?
私の推測では、パスContent/css
はアプリのディスク上に存在します。この場合、IISはMVCではなくリクエストを処理します。
バンドルの仮想パス(StyleBundleコンストラクターのパラメーター)がファイルシステム内のフォルダーと一致しないことを確認してください。
コメントから:
「バンドルを作成する際に従うべき慣習は、バンドル名にプレフィックスとして「バンドル」を含めることです。これにより、ルーティングの競合を防ぐことができます。」
この問題は、デフォルトで.NETは.jsまたは.css拡張子を持つリクエストを「処理」しません。
これには2つの修正があります(1つだけ行う必要があります)
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
ASP.NET MVCアプリをAppHarborにデプロイしようとしたときにも、私と同じことが起こりました。
名前付きのスタイルシートバンドルがありました
@Styles.Render("~/Content/bootstrap")
フォルダー構造は
-コンテンツ
-コンテンツ\ Bootstrap\...
バンドル名を"~/Content/bootstrap-css"
に変更するだけで、問題が解決しました。
私はこの質問に4年遅れていることを知っていますが、これは私のために働いた。
public static void RegisterBundles(BundleCollection bundles)
{
...
BundleTable.EnableOptimizations = true; // Added this
}
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]")
私がすることはとても簡単です
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エラーが発生しました。
暗号化されているかどうかは、プロパティ、詳細プロパティ、暗号化されたチェックボックスで確認できます。
チェックを外すと、問題はなくなります。
その(403 Forbidden)エラーについても同じ問題があります。私の場合、理由は組織のプロキシサーバーがcssファイルをブロックしているためです。 Cssファイル名はブロックルールの1つと一致します。
ファイルbootstrap.cssがコンテンツフォルダーにないことがわかったため、パッケージで探してそこに貼り付けました。