在web.config中设置IHttpModule.properties

时间:2015-01-22 14:55:21

标签: c# properties web-config httpmodule ihttpmodule

我制作了自己的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; }
经过一番研究后,我仍然没有办法做到这一点。任何人都知道我想要实现的目标是否可行?

非常感谢, 谢尔

1 个答案:

答案 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>