繁体   English   中英

如何设置C#项目以从本地.css文件将CSS内联到HTML? PreMailer.Net可以做到这一点吗?

[英]How do I set up a C# project to inline css into HTML from a local .css file? Can PreMailer.Net do this?

我正在尝试更新电子邮件模板系统,以允许使用外部.css文件,而不是必须内联编写所有样式。 我的项目在ASP.NET中,据我所知,最常用和功能最丰富的内联是PreMailer.Net ,尽管如果有一个更适合我需要的软件包,我愿意使用其他软件包。 这是我正在尝试做的快速草图:

文件系统

G:/templates/
  index.html
  style.css

inliner.cs

string htmlSource = File.ReadAllText("G:\\templates\\index.html");
var uri = new Uri("G:\\templates\\");
var result = PreMailer.MoveCssInline(uri, htmlSource);

的index.html

<!DOCTYPE html>
<html>
    <head>
        <link rel="stylesheet" type="text/css" href='style.css'>
    </head>
    <body>
    </body>
</html>

当我运行此代码时-出现以下错误:

Unable to cast object of type 'System.Net.FileWebResponse' to type 'System.Net.HttpWebResponse'.

根据文档,我不清楚PreMailer.Net是否支持此用例。 它声称,如果指定BaseUri参数,则可以使用相对URL。 运行PreMailer.Net的C#代码具有必要的上下文并具有对该文件路径的访问权限,这一事实可以证明它可以将HTML文件读取为字符串。

根据 GitHub问题,此问题似乎在刚刚发布的2.1.1中已修复:

添加对使用本地文件路径(例如“ file:/// C:/website/style.css”)提取Uri的支持

当我们通过内部获取本地资源而不是向内部资源发出外部Web请求来优化性能时,这是必需的。 例如,据我所知,css实际上位于本地存储中,因此仅进行快速本地获取(“ file:/// C:/website/style.css”)而不是外部Web请求(“ https:/ /www.example.com/style.css “)

现在,我可以使用BaseUri“ file:///” + new Uri(System.Web.Hosting.HostingEnvironment.MapPath(“〜/”),UriKind.Absolute)初始化PreMailer实例。

这就是我为客户提高性能的方法,只需在此处共享我的代码即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM