如何从web.config获取允许所有用户的页面列表?

时间:2011-05-12 17:27:30

标签: asp.net web-config

  

可能重复:
  How get web config location element?

我的web.config有几个页面,我们都让未经身份验证的用户查看。有没有办法在运行时循环遍历此列表?

  <location path="default.aspx">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>
  <location path="default2.aspx">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>

修改

我想要一个包含所有未经授权页面的列表,以便我可以从一些javascript代码中排除它们,这些代码会在会话即将结束时弹出提醒。

http://www.erichynds.com/examples/jquery-idle-timeout/example-mint.htm

2 个答案:

答案 0 :(得分:1)

查看SiteMaps,可以通过授权进行修剪,并通过SiteMap.CurrentNode.ChildNodes等循环进行迭代。您还需要维护一个SiteMap.xml,其中包含与您的网页结构相匹配的完整网站地图,以便实现此目的。

例如,如果您的目标是专门为非授权用户生成网站导航菜单,则会有SiteMapDataSource之类的内置控件,当与Menu控件结合使用时,可以生成定制的菜单对于授权和非授权用户,自动为用户的当前角色授权。

答案 1 :(得分:1)

您可以使用:System.Configuration.ConfigurationLocation

示例代码显示获取ConfigurationLocationCollection。然后,您应该能够迭代该集合,获取Path属性并执行您要执行的操作。

编辑:我能够使用以下代码正确阅读web.config:

ExeConfigurationFileMap configFileMap =
new ExeConfigurationFileMap();
configFileMap.ExeConfigFilename = Server.MapPath("/web.config");
Configuration config =
    ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);
ConfigurationLocationCollection myLocationCollection = config.Locations;
foreach (ConfigurationLocation myLocation in myLocationCollection) {
    Response.Write(String.Format("Location Path: {0}", myLocation.Path));
    Configuration myLocationConfiguration = myLocation.OpenConfiguration();
    Response.Write(String.Format("Location Configuration File Path: {0}",
        myLocationConfiguration.FilePath));
}

但是,正如您在评论中提到的那样,ConfigurationLocationCollection是空的!我的web.config中有6个位置条目,所以这绝对很奇怪。