2016-01-28 3 views
1

В настоящее время мы ежедневно отправляем тысячи электронных писем нашим клиентам. Электронная почта содержит URL-адрес изображения с определенным идентификатором сообщения. Когда пользователь загружает это изображение, я отмечаю это сообщение как открытое в базе данных. Например:Стратегия плагина DiskCache для отслеживания изображений электронной почты с отслеживанием

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

В этот момент для каждого запроса на изображение требуется, чтобы я получал байт [] изображения из кеша. Измените его размер. И верните его. Все это происходит в httphandler.

Я хотел бы воспользоваться преимуществами ImageResizer.net и плагина Disk Cache. Тем не менее, мне все еще нужно получить параметр 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, и я добавляю туда свою собственную логику.

ответ

1

Если ваша цель - увеличить производительность и/или уменьшить работу, которую должен выполнить сервер, я бы предположил, что вы не должны использовать полноразмерное изображение для отслеживания, но вместо этого используйте невидимое изображение 1x1.png для отслеживать, было ли сообщение открыто, и просто использовать стандартный URL-адрес img, который все разделяют (которые могут быть распространены на CDN и/или кэшированы) для изображения, которое люди действительно видят.

+0

Благодарим вас за быстрый ответ. Я тоже рассматривал этот вариант. Но я читал, что небольшие (например, 1px-изображения) могут быть заблокированы спамфильтрами. Хотя такие компании, как MailChimp, также используют этот параметр. Я обсужу это с моими коллегами. Если у меня появятся дополнительные вопросы, я отправлю их здесь. – JonHendrix

1

Вы можете просто добавить обработчик событий в ImageResizer.Config.Current.Pipeline.AuthorizeImage - это будет вызвано для всех запросов изображения и будет менее хрупким, чем подкласс HttpModule.