我正在尝试编写一些 C# 代码来对 IIS 进行管理。
我的 Web 应用程序有一个 Microsoft.Web.Administration.Application 实例。
如何使用此对象在“身份验证”下获取与 IIS 中相同的信息?
我期望一个包含以下内容的列表:
- 匿名身份验证(已禁用)
- ASP.NET 模拟(已启用)
- 表单身份验证(已禁用)
- Windows 身份验证(启用)
在此先感谢,斯蒂芬
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);