DiskCache插件策略,用于跟踪电子邮件图像

时间:2016-01-28 12:27:59

标签: c# asp.net imageresizer

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

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

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

我想利用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并且我在那里添加了我自己的逻辑。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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