繁体   English   中英

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

[英]How to set ImageResizer configuration programmatically?

我想以编程方式设置配置参数clientcache.minutes但在ImageResizer中的配置设计上clientcache.minutes

我目前的方法是:

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插件没有像设置clientcache.minutes时通常发送的那样发送Expires标头。

可能是什么问题?

在仔细研究了源代码之后,我发现在这种特殊情况下,您需要更改全局配置对象,因为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实现或Global.asax Application_Start()中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM