web-dev-qa-db-ja.com

ASP.NET MVCフレームワーク4.5 CSSバンドルがホスティングで機能しない

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-許可されていません:アクセスが拒否されました。

これをトラブルシューティングする方法は?

141
Ricardo Polo

私の推測では、パスContent/cssはアプリのディスク上に存在します。この場合、IISはMVCではなくリクエストを処理します。

バンドルの仮想パス(StyleBundleコンストラクターのパラメーター)がファイルシステム内のフォルダーと一致しないことを確認してください。

コメントから:

「バンドルを作成する際に従うべき慣習は、バンドル名にプレフィックスとして「バンドル」を含めることです。これにより、ルーティングの競合を防ぐことができます。」

281
Paul

この問題は、デフォルトで.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

44
cdeutsch

ASP.NET MVCアプリをAppHarborにデプロイしようとしたときにも、私と同じことが起こりました。

名前付きのスタイルシートバンドルがありました

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

フォルダー構造は

-コンテンツ

-コンテンツ\ Bootstrap\...

バンドル名を"~/Content/bootstrap-css"に変更するだけで、問題が解決しました。

19
Yasser

私はこの質問に4年遅れていることを知っていますが、これは私のために働いた。

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

   BundleTable.EnableOptimizations = true;     // Added this           
}
12
RayLoveless

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

9
yantaq

私がすることはとても簡単です

ScriptBundleの最後に「js」を追加します:new ScriptBundle( "〜/ bundles/appjs")そしてStyleBundleの最後に「css」を追加します:new StyleBundle( "〜/ content/appcss")

フォルダー名が「js」または「css」で終わることはありません。

それはそれを行う必要があります。

3
abelabbesnabi

BundleConfigクラスで以下のコード行を追加することで問題を解決しました

BundleTable.EnableOptimizations = false;
3
Ye Yint

これは「ScriptBundleクラス」にも適用されます。コンストラクターの「パラメーター名」がWebアプリケーションファイルシステムのパスと一致しないようにしてください。 IISがファイル/リクエストを提供しようとすることに注意してください。

2
William

問題は、暗号化されているファイルからも発生します。これは、BootStrapをダウンロードし、提供されたファイルを使用したときに発生しました。 Windowsエクスプローラーで緑色に表示され、Visual Studioで正常に機能しましたが、展開すると403エラーが発生しました。

暗号化されているかどうかは、プロパティ、詳細プロパティ、暗号化されたチェックボックスで確認できます。

チェックを外すと、問題はなくなります。

1
Greg Gum

その(403 Forbidden)エラーについても同じ問題があります。私の場合、理由は組織のプロキシサーバーがcssファイルをブロックしているためです。 Cssファイル名はブロックルールの1つと一致します。

0

ファイルbootstrap.cssがコンテンツフォルダーにないことがわかったため、パッケージで探してそこに貼り付けました。

0
Majid ALSarra