未经身份验证的用户无法在网站中看到图片

时间:2010-11-07 04:16:54

标签: asp.net asp.net-mvc iis-7

当我在visual studio中通过调试模式运行我的网站时,一切看起来都很棒,并且页面上的所有图像都显示正常。但是,一旦我将我的网站部署到IIS7网络服务器(怀疑其他版本会有所作为,但你永远不知道),那么用户在登录之前就无法看到网站上的图像。

该网站是一个asp.net MVC网站,我是MVC的新手,虽然我对asp.net表单有很多经验。似乎只允许经过身份验证的用户访问images文件夹,并且我的web.config中有一个授权部分,说只有管理员可以访问该站点,所以我该如何创建它以便所有用户,经过身份验证或以其他方式查看图像?

- 更新 -

我尝试使用建议的配置块,从我能说的所有内容都非常有意义,但它似乎并没有什么区别。下面的示例包含路径的内容/图像,但在此之前我只尝试了内容,因为可以访问其中的所有内容。我也尝试将allowOverride设置为false,这似乎也没有什么区别。

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

- 更新2 - 有趣的是,我甚至没有在我的web.config中看到任何明确的拒绝条目,只是允许管理员,当我进入IIS 7并使用UI允许所有用户访问内容目录时它没有在列表中显示任何拒绝。但话说再说一次,当我从我的个人计算机上调试它时,这个项目工作正常,只有在我部署之后我才遇到问题......

<authorization>
    <allow roles="admin" />
</authorization>
<authentication mode="Forms">
    <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>

7 个答案:

答案 0 :(得分:14)

在您的web.config文件中,在</system.web>标记之后添加以下内容

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

其中path="images"是包含images / css的文件夹的名称。

更新

如果您正在使用ASP.NET MVC,我会删除web.config文件中的授权声明,并使用需要锁定的控制器上的[Authorize]属性。

您还可以使用[Authorize("admin")]指定要授予其访问权限的角色。

答案 1 :(得分:6)

默认情况下,您在Web.config文件中定义的配置适用于其包含文件夹的每个子目录。如果应用程序根目录中有Web.config,则该配置将传播到每个子目录,包括具有图像和Css样式表的子目录。所以,如果您在根Web.config中有这样的规则:

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

匿名用户将无法像您期望的那样访问显示页面所需的资源。

要修复它,您需要在具有演示资源的每个子目录中包含另一个Web.config,并应用您要覆盖的规则。在你的情况下,这应该做的工作:

<?xml version="1.0"?>
<configuration>
   <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
   </system.web>
</configuration>

如果您使用的是主题,请在主题文件夹中放置一个Web.config文件。

答案 2 :(得分:6)

刚遇到同样的问题。我们在登录页面上注意到了它。 CSS和图像未加载(它们位于内容目录下)。将IUSR添加到具有读取权限的文件夹中为我们修复了它。

答案 3 :(得分:2)

老问题,但我遇到了同样的问题并找到了答案。 我为会员页面创建了一个新文件夹,我希望登录用户可以访问,但图像不会显示在其中! 事实证明,无论我尝试什么,我都无法在Members文件夹中设置图像的相对路径。

问题是html图像(据我所知,如果我错了,请纠正我)。 我把它换成了asp:image的相对路径,现在效果很好。 我的新代码:asp:image runat="server" id="Logo" ImageUrl="~/Images/logo.jpg"

注意'〜/',这对我不起作用 我尝试过:img src="../Images/logo.jpg"img src="~/Images/logo.jpg"img src="/Images/logo.jpg"等无济于事。

希望这个答案有助于将来更快地解决这个问题。

答案 4 :(得分:1)

尝试直接浏览图片文件,看看是否出现匿名用户。在IIS 7中,有一种方法可以直接从UI中授权匿名用户[如果不存在,则会创建web.config]。

文件夹 - &gt; .NET授权规则 - &gt;添加允许规则

答案 5 :(得分:0)

您使用的是会员框架吗?我怀疑您在web.config中错误配置了权限设置,而您的images文件夹只允许授权请求。这可以通过web.config轻松更改。只需从授权部分删除文件夹名称,这应该可以解决问题。

如果您使用的是成员资格框架,那么您应该参考web.config中的部分:

 <authorization>
  <deny roles="xyz" />
</authorization>

答案 6 :(得分:0)

我们在项目中遇到了同样的问题并找到了解决方案,但我们不确定这种行为的原因。

我们有一个类似的场景,其中包含一个包含所有png图像的文件夹。我们的营销同事想要重命名其中的一些,所以为了让她更容易,我们共享(这可能是关键)该文件夹,授予读者/作者权利。

从这一点开始,图像开始按照您的描述运行,需要授权才能访问。没有未经授权的用户可以再看到它们。

我们意识到问题与共享文件夹有关,因为它在那个时间点开始发生。否则,我们仍然看不到ASP.NET MVP用户授权/登录和硬盘用户权限之间的任何关系。我们本可以预料到IO异常或类似的东西,但不是这种行为。

检查文件夹后,与其他文件夹进行比较,我们意识到共享后,文件夹的权限略有变化。主要是他们不再继承其父文件夹,并且某些权限(如CREATOR OWNER和MACHINE_NAME \ Users)已消失(尽管IUSR和应用程序池用户仍在那里)。

因此,我们重命名该文件夹,创建一个具有相同名称的新文件夹,并将旧文件夹中的内容复制到新文件夹中。新文件夹具有从其父级继承的权限,一切都开始完美运行。

它解决了我们的问题,但我们仍然不确定为什么这一切都是这样发生的。

此致