2017-08-04 101 views
0

我想以编程方式设置配置参数clientcache.minutes,但我正在与ImageResizer中的配置设计挣扎。如何以编程方式设置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.minutes被设置ClientCache插件不发送Expires头不起作用。

可能是什么问题?

回答

0

经过对源代码的挖掘后,我发现在这种特殊情况下,您需要更改全局配置对象,因为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.asaxApplication_Start()

相关问题