我有一个多客户系统,不同的客户有不同的品牌颜色。
这些颜色存储在数据库中,并在我的LESS文件中作为@color {1-3}引用。
我们曾经维护一个colors.less文件,并引用了这些颜色所有的地方。在客户端中立的情况下,我们只使用我们的品牌颜色渲染普通包,但在客户区内,我们会注入在DB中更改客户端颜色时生成的存储CSS文件。
这很好但是保持colours.less文件变得有点笨拙,所以我想做的是渲染css"实时"这样就不需要手动生成css文件了。显然,我不能在每个请求中执行此操作,因为它会在每次加载页面时对服务器进行相当密集的css生成。
我的问题是我如何使用捆绑或其他形式的缓存来动态生成这个css(即实际上没有存储 css文件)而不是锤击服务器?
答案 0 :(得分:0)
您可以实现自定义http处理程序:
public class CustomHandler : IHttpHandler
{
#region IHttpHandler Members
public bool IsReusable
{
// Return false in case your Managed Handler cannot be reused for another request.
// Usually this would be false in case you have some state information preserved per request.
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
var sb = new StringBuilder();
// read values from db and cache them with HttpContext.Current.Cache
sb.Append(".black : { color: 'black'; }");
context.Response.Clear();
context.Response.ContentType = "text/css";
context.Response.Write(sb.ToString());
}
#endregion
}
的web.config:
<system.webServer>
<handlers>
<add name="ColorsHandler" verb="GET" path="colors.axd" type="WebApplication3.Infrastructure.CustomHandler, WebApplication3, Version=1.0.0.0, Culture=neutral" />
</handlers>
</system.webServer>
唯一的限制是您不能将此处理程序作为MVC Bundle引用,因为MVC包只能处理静态文件。因此,您必须将其作为样式表引用:
<link rel="stylesheet" href="~/colors.axd" type="text/css">