0

MVC コントローラー/アクションを使用して、MVC 3 サイトで site.css を動的に作成しています。それが機能する方法は、ルートを次のように Site.css にマップすることです。

routes.MapRoute("CSS", "Content/Site.css", new { controller = "CSS", action = "Index" });

次に、CSSController に次のコードがあります。

public ActionResult Index() {
    string path = Request.PhysicalPath.Replace("Site.css","SiteStyles.css");
    byte[] data = null;

    try {
        using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read)) {
            data = ProcessCSS(fs);
        }
    } catch (Exception e) {
        Logger.Write(new LogEntry(e.Message, "Error", 99, 1001, System.Diagnostics.TraceEventType.Error, "CSS Error", null));
        throw e;
    }

    return File(data, "text/css","Site.css");
}

ProcessCSS メソッドで行われているのは、SiteStyles.css を通過し、定義したいくつかの定数に対して検索/置換を実行することです。これにより、上部に一連の色を名前付き定数として定義し、その色が必要な場所ならどこでも使用できます。サイトでは、名前付き定数を使用しています。そうすれば、色を 1 回変更するだけで、スタイルシート内の適切なすべての場所に色が反映され、5 ~ 6 か所に触れる必要がなくなります。

上記のコードは、私のローカル環境と開発サーバー (IIS6 を実行している Windows Server 2003) でうまくデバッグできます。ただし、IIS6 を実行している Windows Server 2003 でもある運用サーバーに展開すると、css が読み込まれず、Site.css (ルート経由でマップされるはずです) を参照しようとすると、404 が見つかりません。エラー。開発サーバーに移動して Site.css の出力を取得し、運用サーバーに物理的な Site.css ファイルを作成すると、機能します。

これが本番サーバーで失敗する理由は何ですか?

CSSControler にログを追加して、SiteStyles.css を探している場所をログに記録しましたが、本番サーバーでログが生成されていません。これは、サーバーがマップされたルートを完全に無視し、コントローラーでコードを実行していないことを示しています。 .

どこから始めるべきかについての提案は大歓迎です。

4

2 に答える 2

0

プールが実行されているユーザーに、cssが配置されているフォルダーに書き込み権限を追加してみてください。

于 2012-10-01T20:05:44.517 に答える
0

必要なマッピングが適用されていることを確認するために、運用サーバーで IIS 構成を再確認する必要があるように思えます。

開発サーバーの IIS でワイルドカード (スター) マッピングを使用していますか、または .css 拡張子のマッピングを定義しましたか? 本番サーバーに同じマッピングがあることを確認する必要がある場合があります。

于 2012-04-30T20:22:51.177 に答える