Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在一个位置引用Web.Config设置_.net_Asp.net_Web Config - Fatal编程技术网

.net 在一个位置引用Web.Config设置

.net 在一个位置引用Web.Config设置,.net,asp.net,web-config,.net,Asp.net,Web Config,我有一个asp.net web应用程序,它使用了我编写的用于使用eDirectory ldap服务器的MembershipProvider和RoleProvider 以下是我的提供商: <membership defaultProvider="EDirectoryMembershipProvider"> <providers> <clear/> <add name="EDirectoryMembershipProvider" type

我有一个asp.net web应用程序,它使用了我编写的用于使用eDirectory ldap服务器的MembershipProvider和RoleProvider

以下是我的提供商:

<membership defaultProvider="EDirectoryMembershipProvider">
  <providers>
    <clear/>
    <add name="EDirectoryMembershipProvider" type="EDirectoryMembershipProvider" 
         PrimaryLdapServer="1.2.3.4" 
         SecondaryLdapServer="5.6.7.8" 
         LdapPort="1234" 
         CertPath="d:\mycert.crt" />
  </providers>
</membership>

<roleManager enabled="true" defaultProvider="EDirectoryRoleProvider" cacheRolesInCookie="true" cookieRequireSSL="true">
  <providers>
    <clear/>
    <add name="EDirectoryRoleProvider" type="EDirectoryRoleProvider" 
         PrimaryLdapServer="1.2.3.4" 
         SecondaryLdapServer="5.6.7.8" 
         LdapPort="1234" 
         CertPath="d:\mycert.crt" />
  </providers>
</roleManager>


这两个提供程序在web.config中配置,并且两者的设置相同。是否有办法将设置存储在另一个部分(最好是appsettings)中,并参考该部分进行提供商的配置?

如果我理解正确,这就是您的要求:

<membership configSource="membership.config">

我放置了一些我满意的东西:

我创建了这个配置类:

    public class LdapConfiguration : ConfigurationSection
    {
        [ConfigurationProperty("PrimaryServer", IsRequired = true)]
        public string PrimaryServer
        {
            get { return (string)base["PrimaryServer"]; }
            set { base["PrimaryServer"] = value; }
        }

        [ConfigurationProperty("SecondaryServer", IsRequired = true)]
        public string SecondaryServer
        {
            get { return (string)base["SecondaryServer"]; }
            set { base["SecondaryServer"] = value; }
        }

        // more properties that I need
        ...
    }
然后我注册了一个新的配置部分,并将配置存储在ldapConfiguration元素中:

    <configSections>
      ...
      <section name="ldapConfiguration" type="LdapConfiguration"/>
    </configSections>
    <ldapConfiguration PrimaryServer="1.2.3.4" SecondaryServer="5.6.7.8" Port="1234" CertPath="d:\mycert.cert" />

    <system.web>
    ...
    <!--Oh, my God, this is so awesome! In your face!-->
    <membership defaultProvider="EDirectoryMembershipProvider">
      <providers>
        <clear/>
        <add name="EDirectoryMembershipProvider" type="EDirectoryMembershipProvider" />
      </providers>
    </membership>

    <roleManager enabled="true" defaultProvider="GtccLdapRoleProvider" cacheRolesInCookie="true" cookieRequireSSL="true">
       <providers>
          <clear/>
          <add name="GtccLdapRoleProvider" type="EDirectoryRoleProvider" />
       </providers>
    </roleManager>
  ...
  </system.web>
现在我将这些配置设置存储在一个位置

    public EDirectoryMembershipProvider()
    {
        var ldapConfig = (LdapConfiguration)WebConfigurationManager.OpenWebConfiguration("/").GetSection("ldapConfiguration");
        this.PrimaryLdapServer = ldapConfig.PrimaryServer;
        this.SecondaryLdapServer = ldapConfig.SecondaryServer;
        // initialize the rest here
        ...
    }

    public override void Initialize(string name, NameValueCollection config)
    {
        base.Initialize(name, config);
        // not initializing here anymore
    }