在Web.Config Location Path元素中指定多个目录

时间:2011-01-05 20:18:03

标签: asp.net path web-config location

在我的ASP.NET的Web Config文件中,我定义了以下位置元素:

  <location path="">
    <system.web>
      <authorization>
        <deny users="?"/>
      </authorization>
    </system.web>
  </location>

  <location path="dir1">
    <system.web>
      <authorization>
        <allow users="?"/>
      </authorization>
    </system.web>
  </location>

  <location path="dir2">
    <system.web>
      <authorization>
        <allow users="?"/>
      </authorization>
    </system.web>
  </location>

上面的示例指定将所有目录锁定到除两个目录dir1和dir2之外的匿名用户。

我很好奇是否有我可以使用的语法,这将允许我在一个位置元素中定义多个目录。例如,如果我们可以做这样的事情会很方便......

  <location path="dir1,dir2,etc">
    <system.web>
      <authorization>
        <allow users="?"/>
      </authorization>
    </system.web>
  </location>

4 个答案:

答案 0 :(得分:39)

您不能在path属性中指定多个元素,但可以使用configSource属性。

例如,以下原始web.config文件:

<?xml version="1.0"?>
<configuration>
  <location path="form1.aspx">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>
  <location path="form2.aspx">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>
  <location path="form3.aspx">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>
  <location path="form4.aspx">
    <system.web>
      <authorization>
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>
  <location path="form5.aspx">
    <system.web>
      <authorization>
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>
  <location path="form6.aspx">
    <system.web>
      <authorization>
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>
</configuration>

可以替换为以下等效的web.config,allow.config和deny.config文件:

的web.config

<?xml version="1.0"?>
<configuration>
  <location path="form1.aspx">
    <system.web>
      <authorization configSource="allow.config" />
    </system.web>
  </location>
  <location path="form2.aspx">
    <system.web>
      <authorization configSource="allow.config" />
    </system.web>
  </location>
  <location path="form3.aspx">
    <system.web>
      <authorization configSource="allow.config" />
    </system.web>
  </location>
  <location path="form4.aspx">
    <system.web>
      <authorization configSource="deny.config" />
    </system.web>
  </location>
  <location path="form5.aspx">
    <system.web>
      <authorization configSource="deny.config" />
    </system.web>
  </location>
  <location path="form6.aspx">
    <system.web>
      <authorization configSource="deny.config" />
    </system.web>
  </location>
</configuration>

allow.config

<?xml version="1.0"?>
<authorization>
  <allow users="*"/>
</authorization>

deny.config

<?xml version="1.0"?>
<authorization>
  <deny users="*"/>
</authorization>

随着每个部分中允许/拒绝规则的数量增加,此方法的有用性也会增加。

答案 1 :(得分:15)

抱歉,但路径属性不允许使用“,” 所以你必须为所有路径写标签, 或者您可以在每个目录中创建web.config。

答案 2 :(得分:0)

可以设置特定文件夹的路径。 例如,我们有一些aspx页面:

  • /data/pages/form1.aspx
  • /data/pages/form2.aspx
  • /data/pages/form3.aspx

在web.config中创建此规则:

class Member < ApplicationRecord
  enum role: [:member, :moderator, :admin]
  belongs_to :user
  belongs_to :organization

<location path="data/pages"> <system.webServer> <httpProtocol> <customHeaders> <remove name="X-Frame-Options" /> <add name="X-Frame-Options" value="SAMEORIGIN" /> </customHeaders> </httpProtocol> </system.webServer> </location> 中的所有资源都会受到影响。

答案 3 :(得分:0)

我有一个类似的问题。因此采用了创建单独标签的常规方法,没有其他更好的解决方案。