使用MVC捆绑从LESS文件生成自定义CSS

时间:2014-11-19 11:11:11

标签: asp.net-mvc model-view-controller bundling-and-minification

我有一个多客户系统,不同的客户有不同的品牌颜色。

这些颜色存储在数据库中,并在我的LESS文件中作为@color {1-3}引用。

我们曾经维护一个colors.less文件,并引用了这些颜色所有的地方。在客户端中立的情况下,我们只使用我们的品牌颜色渲染普通包,但在客户区内,我们会注入在DB中更改客户端颜色时生成的存储CSS文件。

这很好但是保持colours.less文件变得有点笨拙,所以我想做的是渲染css"实时"这样就不需要手动生成css文件了。显然,我不能在每个请求中执行此操作,因为它会在每次加载页面时对服务器进行相当密集的css生成。

我的问题是我如何使用捆绑或其他形式的缓存来动态生成这个css(即实际上没有存储 css文件)而不是锤击服务器?

1 个答案:

答案 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">