从 ASP.NET MVC 网站的代码中的捆绑包读取 CSS 内容

BG1*_*100 3 css asp.net bundle resourcebundle server.mappath

我有一个网站,使用引导程序和引导程序主题。当网站用户触发某些操作时,我的网站还会向他们发送通知电子邮件。

我希望发送的通知电子邮件的正文是格式良好的 HTML 内容,具有与主网站相同的外观和感觉。

我一直被教导要编写 DRY 代码,并使事情尽可能可维护,所以我想包含我的网站用作电子邮件中嵌入文件的相同引导 CSS,并让 HTML 正文引用该 CSS,所以如果我决定更改网站的主题,它会自动重新设置我的通知电子邮件的样式。

我用来System.Net.Mail.SmtpClient发送电子邮件,并使用 AlternateViews 添加内容。我不想在我的网站的 CSS 中包含实时引用,以防电子邮件被离线查看,所以我想嵌入 CSS。

我一直不知道如何将 CSS 文件读入字符串,并将其附加到电子邮件中。在我的 BundleConfig 中,我有这个:

bundles.Add(new StyleBundle("~/Content/css").Include(
          "~/Content/bootstrap-sandstone.css",
          "~/Content/site.css"));
Run Code Online (Sandbox Code Playgroud)

所以我尝试:

var css = File.ReadAllText(HttpContext.Current.Server.MapPath("~/Content/css"));
Run Code Online (Sandbox Code Playgroud)

但正如我想象的那样,它抛出了 FileNotFound 异常。

我可以使用什么来让我传入~/Content/css和传出弹出CSS?

BG1*_*100 5

我找到了一种使用以下代码获取 CSS 内容的方法:

var cssBundle = BundleTable.Bundles.GetBundleFor("~/Content/css");
var css = cssBundle.GenerateBundleResponse(new BundleContext(new HttpContextWrapper(HttpContext.Current), BundleTable.Bundles, string.Empty)).Content;
Run Code Online (Sandbox Code Playgroud)

然而,正如梅森(在评论中)预测的那样,CSS 在电子邮件中不起作用,而且它太大了,所以我将简单地将基本 CSS 嵌入到 HTML 中。