如何以编程方式设置 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
中。
我想以编程方式设置配置参数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
中。