14

一部の .css および .js ファイルにバンドルの縮小を使用しようとしています。私のバンドル構成は次のとおりです。

public static void RegisterBundles(BundleCollection bundles)
    {
        bundles.Add(new ScriptBundle("~/Modernizr").Include(
            "~/Scripts/modernizr.js"
        ));

        bundles.Add(new StyleBundle("~/TemplateContent").Include(
            "~/Content/bootstrap.css",
            "~/Content/bootstrap-responsive.css",
            "~/Content/prettyPhoto.css",
            "~/Content/prettify.css",
            "~/Content/flexslider.css",
            "~/Content/iview.css",
            "~/Content/style.css",
            "~/Content/default.css"
        ));

        bundles.Add(new StyleBundle("~/AppContent").Include(
            "~/Content/bootstrap-tablesorter.css",
            "~/Content/animate.css",
            "~/Content/font-awesome.css",
            "~/Content/jcarousel.css",
            "~/Conten/overwrite.css",
            "~/Content/sequence.css",
            "~/Content/sequence.ie.css",
            //more styles
        ));

        bundles.Add(new ScriptBundle("~/TemplateScripts").Include( 
            "~/Scripts/modernizr-*",
            "~/Scripts/jquery.js",
            "~/Scripts/raphael.js",
            "~/Scripts/jquery.easing.1.3.js",
            "~/Scripts/bootstrap.js",
            "~/Scripts/google-code-prettify/prettify.js",
            "~/Scripts/jquery.elastislide.js",
            "~/Scripts/jquery.tweet.js",
            "~/Scripts/jquery.prettyPhoto.js",
            "~/Scripts/jquery.flexslider.js",
            "~/Scripts/iview.js",
            "~/Scripts/jquery-hover-effect.js",
            "~/Scripts/animate.js",
            "~/Scripts/custom.js"
        ));

        bundles.Add(new ScriptBundle("~/AppScripts").Include(
            "~/Scripts/jquery.ticker.js",
            "~/Scripts/jquery.contenthover.js",
            "~/Scripts/jquery-ui-1.10.3.js",
            "~/Scripts/datetimepicker.js",
            "~/Scripts/jquery.metadata.js",
            //more scripts
        ));

        BundleTable.EnableOptimizations = true;
}

アプリをサーバー (godaddy 共有 Web ホスティング) に公開すると問題が発生します。出力は縮小されますが、それらの出力で 403 エラーが発生します。

私が設定した場合

BundleTable.EnableOptimizations = false;

ファイルは縮小されていませんが、ページは正しい動作をしています。

4

3 に答える 3

1

縮小されたスクリプトをバンドルしようとしない限り、機能するはずです。JavaScript を記述していて、セミコロンを忘れた場合、スクリプトを呼び出したときにスクリプトが失敗することがありますが、403 エラーはスローされません。

403 エラーが発生するので、これはバンドルとは関係がないと推測しています。正確なエラーを表示できますか? 403.2: 読み取りアクセスは禁止されていますか? それとも、自分のサイトに公開しようとしたときですか (403.3: 書き込みアクセスは禁止されています)? 開発時の最適なセットアップは、リリースをバンドルしてローカル マシンに公開できるように、ローカル IIS を適切にセットアップすることです。これが機能する場合は、ファイルをローカル マシンからパブリック サーバーにコピーするだけです。公開サーバーで何か問題が発生した場合、それはそのマシンの構成エラーであり、コードの問題ではないことがわかります。

私の推測では、アプリケーションをサイトに公開することは許可されていません (一部のフォルダーへの書き込みアクセスが拒否されます) が、それ以上の情報がなければ、なんとも言えません。

編集:バンドルについてもう少し読んだ後、スクリプトを既存のフォルダーにバンドルしていることはほぼ確実です。

ASP.NET のすべての要求は、http ハンドラー (静的ハンドラー、ページ ハンドラー、ashx ハンドラーなど) によって管理されます。global.asax のルートと一致する UrlRoutingModule と呼ばれる特別な HTTP モジュールがあります。ルートが一致する場合は、HttpContext.RemapHandler メソッドを使用して現在の http ハンドラーを変更します。それ以外の場合は、通常の ASP.NET フローが続行されます。同様に、System.Web.Optimization は、バインディングとの一致を試みる BundleModule http モジュールを挿入します。一致が見つかった場合は、HttpContext.RemapHandler メソッドを使用して、BundleHandler を http ハンドラーとして選択します。HostingEnvironment.VirtualPathProvider.FileExists(path) が true または HostingEnvironment.VirtualPathProvider.DirectoryExists(path) が true の場合、System.Web.Optimization は内部的に一致を残します。

スレッド全体を読む

これで、すべてのバンドルが"~/bundles/"で始まるようにします。これにより、スクリプトが存在するフォルダーを指したり、ルート構成に引っかかったりすることがなくなります。

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(...
于 2013-11-11T15:16:23.843 に答える