我正在使用 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 并对我定义的一些常量执行查找/替换,以便我可以在顶部定义一组颜色作为命名常量,然后在我需要该颜色的任何地方在站点中,我只使用命名常量。这样我就可以更改一次颜色,它会传播到样式表中所有适当的位置,而无需我去触摸 5-6 个不同的位置。
上面的代码在我的本地环境和运行 IIS6 的 Windows Server 2003 开发服务器上运行良好。但是,当我将它部署到也是运行 IIS6 的 Windows Server 2003 的生产服务器时,没有加载 css,当我尝试浏览到 Site.css(应该通过我的路由映射)时,我得到一个 404 not found错误。如果我去我的开发服务器并获取 Site.css 的输出并在生产服务器上创建一个物理 Site.css 文件,它就可以工作。
知道为什么这在生产服务器上失败了吗?
我向我的 CSSControler 添加了一些日志记录以记录它在哪里寻找 SiteStyles.css 并且日志根本没有在生产服务器上生成,这告诉我服务器完全忽略了映射的路由并且没有执行控制器中的代码.
任何关于从哪里开始的建议表示赞赏。