我正在开发一个单页应用,它在.cshtml文件中使用CSS包,如下所示:
@ Styles.Render("〜/内容/ CSS /束-CSS&#34)
但是,为了提高网站的加载性能,我想将整个捆绑并缩小的CSS嵌入到我的.cshtml文件中。所以我想将上面的代码转换为:
@ Html.GetInternalCss("〜/内容/ CSS /束-CSS&#34);
其中GetInternalCss是一种扩展方法,它将获取css虚拟路径并输出内部css。代码如下所示:
public static MvcHtmlString GetInternalCss(this HtmlHelper html, string styleBundleVirtualPath)
{
//TODO:
var bundledCss = "How do I extract the css from the virtual path?";
var internalCss = string.Format("<style>{0}</style>", bundledCss);
return new MvcHtmlString(internalCss);
}
我知道捆绑的css在内存中。我只需要知道如何解决它。谢谢你的帮助。
答案 0 :(得分:0)
我可能已用以下代码回答了我自己的问题:
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Net;
using System.Web.Mvc;
using System.Web.Optimization;
namespace SomeNameSpace
{
public static class HtmlHelpExtensions
{
private static readonly IDictionary<string,string> InternalCssCache = new ConcurrentDictionary<string, string>();
public static MvcHtmlString GetInternalCss(this HtmlHelper html, string styleBundleVirtualPath)
{
string internalCss = null;
if (InternalCssCache.TryGetValue(styleBundleVirtualPath, out internalCss))
return new MvcHtmlString(internalCss);
//download the css
var relativeUrl = Styles.Url(styleBundleVirtualPath);
var url = html.ViewContext.HttpContext.Request.Url + relativeUrl.ToString().Trim('/');
var webClient = new WebClient();
var css = webClient.DownloadString(url);
internalCss = string.Format("<style>{0}</style>", css);
InternalCssCache[styleBundleVirtualPath] = internalCss;
return new MvcHtmlString(internalCss);
}
}
}