从web.config读取AuthorizationSection提供的值不正确

时间:2016-07-15 19:31:03

标签: c# asp.net web-config

编辑#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中的内容。我在这里缺少什么?

enter image description here

**编辑** 我考虑过它正在读取不同的web.config文件的可能性。但是解决方案中只有一个其他web.config文件(在Views下)。我也将其更改为具有相同的授权部分,但我仍然得到相同的结果。

1 个答案:

答案 0 :(得分:2)

正如您已经发现使用Null for path OpenWebConfiguration参数加载

中的服务器根web.config
%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("~");