具有跟踪功能的电子邮件图像的磁盘缓存插件策略

本文关键字:磁盘 缓存 插件 策略 图像 电子邮件 跟踪 功能 | 更新日期: 2023-09-27 18:32:20

目前,我们每天向客户发送数千封电子邮件。电子邮件包含具有特定邮件 ID 的图像 URL。当用户下载该图像时,我会将该邮件标记为在数据库中打开。例如:

http://cdn.mydomain.com/companylogos/{guid}.png?h=100&w=100&messageid=123

此时,每个图像请求都需要我从缓存中获取图像的字节[ ]。调整其大小。并归还它。这一切都发生在一个httphandler中。

我想利用 ImageResizer.net 和磁盘缓存插件的优势。但是,我仍然需要获取 MessageId-querystring 参数。所以我正在考虑这个解决方案。

扩展 HttpModule

public class CustomInterceptModule : InterceptModule
{
    protected override void HandleRequest(HttpContext context, HttpModuleRequestAssistant ra, IVirtualFile vf)
    {
        var messageIdParam = context.Request.QueryString["messageId"];
        int messageId;
        if (!string.IsNullOrWhiteSpace(messageIdParam) && int.TryParse(messageIdParam, out messageId))
        {
            // Do something with the ID here   
        }
        base.HandleRequest(context, ra, vf);
    }
}

此方法是否仍会创建高性能的磁盘缓存结果?还是我打断了这个,因为我正在扩展 HttpModule 并且我正在其中添加我自己的逻辑。

具有跟踪功能的电子邮件图像的磁盘缓存插件策略

如果您的目标是提高性能和/或减少服务器需要做的工作,我建议您不要使用全尺寸图像进行跟踪,而是使用不可见的 1x1.png 图像来跟踪消息是否被打开,只需使用每个人共享的标准 img URL(可以在 CDN 上分发和/或缓存)来获取人们实际看到的图像。

您可以简单地向ImageResizer.Config.Current.Pipeline.AuthorizeImage添加一个事件处理程序 - 这将为所有图像请求调用,并且比子类化 HttpModule 更不脆弱。