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



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

文件系统

G:/templates/
index.html
style.css

内联.cs

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

索引.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 中修复:

添加对使用本地文件路径获取 Uri 的支持,例如 "file:///C:/website/style.css">

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

所以我现在可以使用 BaseUri "file:///" + 初始化 PreMailer 实例 new Uri(System.Web.Hosting.HostingEnvironment.MapPath("~/"(, UriKind.Absolute(

这就是我如何提高客户的性能,只需共享我的代码 这里。

最新更新