2015-03-08 2 views
0

У меня есть возможность проанализировать URL-адрес запрашиваемого изображения и применить команды изменения размера на основе запрошенного URL-адреса, если пользователь не видит команды изменения размера в URL-адресе. Например.ImageResizer Невозможно применить пресет в событии перезаписи (пресеты уже развернуты)

http://someurl.com/image/category/image-title.jpg

Для этого я подключил в Pipeline_Rewrite - базовый пример ниже:

void Pipeline_Rewrite(IHttpModule sender, HttpContext context, ImageResizer.Configuration.IUrlEventArgs e) 
    { 
     // Clear the current command string - we're going to create a new one 
     e.QueryString.Clear(); 

     var process = ((Global)HttpContext.Current.ApplicationInstance).ContainerProvider.RequestLifetime.Resolve<Interfaces.IRequestBuilder>(); 
     // Set the "new" command string 
     e.QueryString = process.BuildCommandList(context);    
    } 

BuildCommandList(context) анализирует текущий URL и строит список соответствующих команд, чтобы добавить в строку запроса и возвращает NameValueCollection. Все это работает отлично, и команды применяются, если только новые команды не являются Preset, определенными в конфиге.

E.g.

Если BuildCommandList(context) возвращает эквивалент width=150&height=150, это работает.

Если BuildCommandList(context) возвращает эквивалент preset=thumbnail, это не сработает, я просто получу полноразмерное исходное изображение.

При дальнейших исследованиях, похоже, что любые команды Preset уже были расширены до соответствующих строк команд до запуска метода Pipeline_Rewrite, поэтому добавление их здесь слишком велико.

Выписка из файла web.config:

<resizer> 
    <presets onlyAllowPresets="false"> 
     <preset name="thumbnail" settings="width=150;height=150" /> 
    </presets> 
    <plugins> 
     <add name="Presets" /> 
    </plugins> 
</resizer> 

Есть ли способ, чтобы очистить командную строку, применить пребет, и ImageResizer повторной обработки пресетов в этот момент?

ответ

0

Если вы хотите, чтобы пресетов работал с вашим обработчиком событий, ваш обработчик событий должен быть зарегистрирован первым.

Я хотел бы предложить удаление <add name="Presets" /> из web.config, и вместо того, чтобы установить его после регистрации обработчика событий, с помощью new ImageResizer.Plugins.Basic.Presets().Install(Config.Current);

+0

Добавление 'новых ImageResizer.Plugins.Basic.Presets() Установить (Config.Current). 'непосредственно под линией, где я зарегистрировал обработчик событий в' Application_Start', отсортировал проблему. –