编辑#2:config.FilePath显示它正在查看与我期望的文件不同的文件:“C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ web.config”。我期待它在我的项目中使用web.config。需要弄清楚为什么会这样。
我的Web API中有一个方法,我正在尝试从web.config中的授权部分读取值。根据我发现的情况,这应该有效:
public AuthorizationSetting GetAuthorizationSettings()
{
var config = WebConfigurationManager.OpenWebConfiguration(null);
var section = config.GetSection("system.web/authorization") as AuthorizationSection;
foreach (AuthorizationRule rule in section.Rules)
{
if (rule.Action.ToString().ToLower() == "allow")
{
Debug.WriteLine(rule);
}
}
return new AuthorizationSetting();
}
这是包含授权信息的web.config部分:
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<identity impersonate="true" />
<authentication mode="Windows" />
<authorization>
<allow roles="role1,role2,role3"/>
<deny users="*"/>
</authorization>
</system.web>
你可以看到有一个允许和一个拒绝。当我运行代码时,似乎只有一个规则。不应该有两个,因为有一个允许和拒绝?并且一条规则看起来具有允许操作和用户的“*”。这不是web.config中的内容。我在这里缺少什么?
**编辑** 我考虑过它正在读取不同的web.config文件的可能性。但是解决方案中只有一个其他web.config文件(在Views下)。我也将其更改为具有相同的授权部分,但我仍然得到相同的结果。
答案 0 :(得分:2)
正如您已经发现使用Null
for path
OpenWebConfiguration
参数加载
%SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\Config\
文件说:
The virtual path to the configuration file. If null, the root Web.config file is opened.
但可以假设它将是网站的根网络配置,而不是服务器。无论如何,尝试使用:
var config = WebConfigurationManager.OpenWebConfiguration("~");