如何以编程方式设置 ImageResizer 配置?

How to set ImageResizer configuration programmatically?

我想以编程方式设置配置参数clientcache.minutes,但我在 ImageResizer 中努力设计配置。

我目前的做法是:

var lWebConfigReader = new System.Xml.XmlTextReader(@"Web.config");

var lXmlDocument = new System.Xml.XmlDocument();
lXmlDocument.Load(lWebConfigReader);

var lResizerNode = lXmlDocument.SelectSingleNode("/configuration/resizer");

var lSection = new ImageResizer.ResizerSection(lResizerNode.OuterXml);

var lConfig = new ImageResizer.Configuration.Config(lSection);

int mins = lConfig.get("clientcache.minutes", -1);

...

ImageResizer.Configuration.Config.Current.setConfigXml(lConfig.getConfigXml());

它看起来有点老套,而且也不起作用,因为 ClientCache 插件没有发送 Expires header,因为 clientcache.minutes 时它通常应该发送设置。

可能是什么问题?

在深入研究源代码后,我发现在这种特殊情况下,您需要更改全局配置对象,因为 ClientCache 插件通过 Get() 从中读取参数。所以我目前的解决方案是:

// read a XML where a <resizer>...</resizer> is present, in this case a typical Web.config as mentioned in the ImageResizer docs
var lWebConfigReader = new System.Xml.XmlTextReader(@"Web.config");

var lXmlDocument = new System.Xml.XmlDocument();
lXmlDocument.Load(lWebConfigReader);

// read the resizer tag to a node
var lResizerNode = lXmlDocument.SelectSingleNode("/configuration/resizer");

// create a section from the node
var lSection = new ImageResizer.ResizerSection(lResizerNode.OuterXml);

// create a new config object from the section
var lConfig = new ImageResizer.Configuration.Config(lSection);

// override the global configugration with the newly created one
ImageResizer.Configuration.Config.Current.setConfigXml(lConfig.getConfigXml());

// test the Get() call used by the ClientCache plugin
int mins = ImageResizer.Configuration.Config.Current.get("clientcache.minutes", -1);

此代码可以放在 ICurrentConfigProvider 实现中或 Application_Start() 放在 Global.asax 中。