-3

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

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

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

我期望一个包含以下内容的列表:

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

在此先感谢,斯蒂芬

4

1 回答 1

-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);
于 2012-06-18T16:34:12.313 回答