使用Microsoft.Web.Administration.Application类,如何获取身份验证列表?

时间:2012-06-18 16:01:50

标签: c# iis-7

我正在尝试编写一些C#代码来管理IIS。

我的Web应用程序有一个Microsoft.Web.Administration.Application实例。

如何使用此对象获取与“身份验证”下的IIS相同的信息?

我希望列表包含以下内容:

  • 匿名身份验证(已禁用)
  • ASP.NET模拟(已启用)
  • 表单身份验证(已禁用)
  • Windows身份验证(已启用)

提前致谢, 斯蒂芬

1 个答案:

答案 0 :(得分:-1)

Configuration configuration = Application.GetWebConfiguration();

然后使用

configuration.GetMetadata("availableSections")

...获取部分列表。身份验证部分以“system.webServer / security / authentication /”开头,因此请搜索这些部分。

然后致电

Application.GetWebConfiguration().GetSection([SECTION]).GetAttributeValue("enabled")

匿名身份验证部分称为“anonymousAuthentication”,Windows身份验证部分称为“windowsAuthentication”。

还有表单身份验证,这将在下面进一步解释。所以代码看起来像这样:

const string authenticationPrefix = "system.webServer/security/authentication/";

private Dictionary<string, string> authenticationDescriptions = new Dictionary<string,string>()
{ 
    {"anonymousAuthentication", "Anonymous Authentication"},
    {"windowsAuthentication", "Windows Authentication"},
};

Configuration configuration = application.GetWebConfiguration();

IEnumerable<string> authentications = ((String)configuration.GetMetadata("availableSections")).Split(',').Where(
    authentication => authentication.StartsWith(authenticationPrefix));

foreach (string authentication in authentications)
{
    string authName = authentication.Substring(authenticationPrefix.Length);
    string authDesc;
    authenticationDescriptions.TryGetValue(authName, out authDesc);
    if(String.IsNullOrEmpty(authDesc))
        continue;
    authenticationCheckedListBox.Items.Add(authDesc, (bool)configuration.GetSection(authentication).GetAttributeValue("enabled"));
}

以下是表单身份验证的代码

enum FormsAuthentication { Off = 1, On = 3 };

ConfigurationSection authenticationSection = configuration.GetSection("system.web/authentication");

authenticationCheckedListBox.Items.Add("Forms Authentication", (FormsAuthentication)authenticationSection.GetAttributeValue("mode") == FormsAuthentication.On);