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 を探している場所をログに記録しましたが、本番サーバーでログが生成されていません。これは、サーバーがマップされたルートを完全に無視し、コントローラーでコードを実行していないことを示しています。 .
どこから始めるべきかについての提案は大歓迎です。