我制作了自己的HttpModule,名为'JsonLogger',用于记录json请求和响应。
对于日志记录,我需要一个连接字符串。
为了找到连接字符串,我在web.config中添加了一个,然后通过代码获取它。
的web.config
<connectionStrings>
<add name="WebShopConfiguration" connectionString="myConString"/>
</connectionStrings>
<system.web>
<httpModules>
<add name="JsonLogger" type="ServiceModel.Logging.JsonLogger, ServiceModel"/>
</httpModules>
</system.web>
<system.webServer>
<modules>
<add name="JsonLogger" type="ServiceModel.Logging.JsonLogger, ServiceModel"/>
</modules>
</system.webServer>
HTTP模块
ConnectionString = System.Configuration.ConfigurationManager.
ConnectionStrings["WebShopConfiguration"].ConnectionString;
一切正常但是imo这个并不干净(未来的开发人员不会知道为什么我的web.config中存在连接字符串)。
我想填写我在web.config中添加httpmodule的connectionstring。我尝试了这个,但这不起作用(就像我已经想到的那样):
的web.config
<add name="JsonLogger" type="ServiceModel.Logging.JsonLogger, ServiceModel" ConnectionString="myConString"/>
HttpModule中的属性
[ConfigurationProperty("ConnectionString", DefaultValue = "", IsRequired = true, IsKey = false)]
public string ConnectionString { get; set; }
经过一番研究后,我仍然没有办法做到这一点。任何人都知道我想要实现的目标是否可行?
非常感谢, 谢尔
答案 0 :(得分:0)
我做到了。
在我的web.config中,我添加了一个类型为LoggingConfiguration的configSection。 在global.asax init()中,我得到了我的配置并使用正确的参数创建了一个新的JsonLogger实例。
<强>的web.config 强>
<configSections>
<section name="LoggingConfiguration" type="WebServices.Services.Configurations.LoggingConfiguration"/>
</configSections>
<LoggingConfiguration
connectionString="myConString">
</LoggingConfiguration>
<强> LoggingConfiguration.cs 强>
public sealed class LoggingConfiguration : ConfigurationSection
{
private const string ConnectionStringKey = "connectionString";
[ConfigurationProperty(ConnectionStringKey, IsRequired = true)]
public string ConnectionString
{
get { return (string) base[ConnectionStringKey]; }
set { base[ConnectionStringKey] = value; }
}
}
<强>的Global.asax.cs 强>
public override void Init()
{
base.Init();
var loggingConfiguration = ConfigurationManager.GetSection("LoggingConfiguration") as LoggingConfiguration;
if (loggingConfiguration != null)
{
new JsonLogger(loggingConfiguration.ConnectionString).Init(this);
}
}
通过这种方式,我可以删除以下web.config中的代码:
<connectionStrings>
<add name="WebShopConfiguration" connectionString="myConString"/>
</connectionStrings>
<system.web>
<httpModules>
<add name="JsonLogger" type="ServiceModel.Logging.JsonLogger, ServiceModel"/>
</httpModules>
</system.web>
<system.webServer>
<modules>
<add name="JsonLogger" type="ServiceModel.Logging.JsonLogger, ServiceModel"/>
</modules>
</system.webServer>