用于带跟踪的电子邮件图像的 DiskCache 插件策略
DiskCache plugin strategy for e-mail images with tracking
目前我们每天向客户发送数千封电子邮件。电子邮件包含带有特定邮件 ID 的图像 url。当用户下载该图像时,我在数据库中将该消息标记为已打开。例如:
http://cdn.mydomain.com/companylogos/{guid}.png?h=100&w=100&messageid=123
此刻,每个图像请求都需要我从缓存中获取图像的字节[ ]。调整大小。并且 Return 它。这一切都发生在 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 并在其中添加我自己的逻辑。
如果您的目标是提高性能 and/or 减少服务器需要做的工作,我建议您不要使用全尺寸图像进行跟踪,而是使用不可见的 1x1.png 图像来跟踪消息是否被打开,并简单地使用每个人共享的标准 img url(可以在缓存的 CDN and/or 上分发)作为人们实际看到的图像.
您可以简单地向 ImageResizer.Config.Current.Pipeline.AuthorizeImage
添加一个事件处理程序 - 这将为所有图像请求调用,并且比继承 HttpModule 更安全。
目前我们每天向客户发送数千封电子邮件。电子邮件包含带有特定邮件 ID 的图像 url。当用户下载该图像时,我在数据库中将该消息标记为已打开。例如:
http://cdn.mydomain.com/companylogos/{guid}.png?h=100&w=100&messageid=123
此刻,每个图像请求都需要我从缓存中获取图像的字节[ ]。调整大小。并且 Return 它。这一切都发生在 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 并在其中添加我自己的逻辑。
如果您的目标是提高性能 and/or 减少服务器需要做的工作,我建议您不要使用全尺寸图像进行跟踪,而是使用不可见的 1x1.png 图像来跟踪消息是否被打开,并简单地使用每个人共享的标准 img url(可以在缓存的 CDN and/or 上分发)作为人们实际看到的图像.
您可以简单地向 ImageResizer.Config.Current.Pipeline.AuthorizeImage
添加一个事件处理程序 - 这将为所有图像请求调用,并且比继承 HttpModule 更安全。