允许匿名用户浏览“样式和图像”文件夹

时间:2012-04-30 21:49:25

标签: asp.net configuration web-config web

我正在编写一个ASP.NET Web应用程序。

我有一个登录屏幕,上面有一些CSS样式和图像。我遇到了一个没有显示样式和图像的问题。我在线阅读,它说我的Content文件夹中需要一个web.config。我在web.config中添加了以下内容:

<configuration>
  <system.web>
    <authorization>
      <allow users="*"/>
    </authorization>
  </system.web>
</configuration>

这似乎适用于我的本地机器。但是,当我在服务器上发布到inetpub时,它不起作用。

这是我的文件夹结构:

登录/登录.aspx - 我的登录界面
内容 - 这是我的根目录文件夹
内容/样式 - 这是我的CSS所在的地方 内容/图像 - 这是我存储图像的地方

我尝试在样式和图像中放置相同的web.config,但这也不起作用。

任何帮助都将不胜感激。

更新

以下是我在与用户访问相关的主web.config中的内容:

<location path="Content">
  <system.web>
    <authorization>
      <allow users="*" />
    </authorization>
  </system.web>
</location>

更新2: 除了连接字符串信息之外,以下是我的根web.config中的所有内容:

<system.web>
<httpRuntime requestValidationMode="2.0"/>
<compilation debug="true" targetFramework="4.0"/>
<sessionState cookieless="UseCookies"/>
<authentication mode="Forms">
  <forms name="CMS" loginUrl="Login/Login.aspx" timeout="25" slidingExpiration="true"/>
</authentication>
<authorization>
  <deny users="?"/>
</authorization>
<membership>
  <providers>
    <clear/>
    <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/"/>
  </providers>
</membership>
<profile>
  <providers>
    <clear/>
    <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/>
  </providers>
</profile>
<roleManager enabled="false">
  <providers>
    <clear/>
    <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/"/>
    <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/"/>
  </providers>
</roleManager>
</system.web>
<location path="Content" allowOverride="false">
<system.web>
   <authorization>
     <allow users="*" />
   </authorization>
 </system.web>
</location>
<system.webServer>
  <modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>

这里有什么东西可以干扰用户访问吗?

4 个答案:

答案 0 :(得分:1)

查看我的answer here。有些人会建议将web.config文件放在要向公众开放的文件夹中,但我更喜欢从root web.config元素监视所有内容。基本上,您插入了已有的相同代码段,但是插入到网站根目录中的web.config文件中。不要忘记“allowOverried = false”属性。 :)

除了可能非常棘手的其他方法是让路径正确。确保你已经只是吧! :)

<location path="Path to your folder" allowOverride="false">
   <system.web>
      <authorization>
         <allow users="*"/>
      </authorization>
   </system.web>
</location>

答案 1 :(得分:1)

我意识到这是一个老问题,但我遇到了同样的麻烦,并希望这有助于某人。

在我的情况下,我必须更改IIS 中的身份验证设置才能使其正常工作。这听起来就像您将其移动到默认配置可能不同的远程服务器时发生的情况。

默认情况下,我们启用了 Windows身份验证模式,但当 web.config 指定表单身份验证时,它实际上会同时启用这两种模式在IIS配置中。

使用你的web.config,你有类似的东西

<system.web>
    <authentication mode="Forms">
        <forms name="CMS" loginUrl="Login/Login.aspx" timeout="25" slidingExpiration="true"/>
    </authentication>
    <authorization>
      <deny users="?"/>
    </authorization>
    <!-- ...etc... -->
</system.web>

如果您移动的服务器启用了Windows身份验证,则IIS中将显示如下所示

enter image description here

请注意,尽管您的配置仅说明了表单,但表单和Windows都已启用。这样做会破坏你在子目录中添加的web.config文件。

如果您的内容文件夹中包含以下内容,则表明它与Windows vs Forms存在冲突,无论您放置什么内容,它似乎都不符合您的web.config

<configuration>
  <system.web>
    <authorization>
      <allow users="*"/>
    </authorization>
  </system.web>
</configuration>

如果您处于相同的情况,请确保禁用Windows身份验证或任何其他未使用的身份验证模式,如下图所示。您还需要确保启用匿名以允许所有人打开。

希望这有助于某人。

enter image description here

答案 2 :(得分:0)

基本上,您希望允许任何用户访问“内容”文件夹中的文件。

将此添加到主web.config:

<location path="Content">
        <system.web>
            <authorization>
                <allow users="*" />
            </authorization>
        </system.web>
    </location>

答案 3 :(得分:0)

通过记录我案例中的帮助: This discussion was useful

  • 我有另一个应用程序,我没有遇到问题,唯一的区别是IUSR在文件夹中有权限。添加IUSR权限帮助
  • 使用&#39;检查&#39;在浏览器中显示控制台,以便在文件无法访问时清楚显示(否则本地缓存会遮挡结果)
  • 我尝试过如上所述在各个级别使用web.configs,但这些解决方案并不适用于我。