Asp.net 未经验证的用户可以';在网站上看不到图片

Asp.net 未经验证的用户可以';在网站上看不到图片,asp.net,asp.net-mvc,iis-7,Asp.net,Asp.net Mvc,Iis 7,当我在VisualStudio中通过调试模式运行我的网站时,一切看起来都很好,页面上的所有图像都显示得很好。但一旦我将我的网站部署到IIS7 web服务器上(怀疑其他版本会有什么不同,但你永远不知道),那么用户在登录之前无法看到网站上的图像 该网站是一个asp.net MVC网站,我是MVC新手,尽管我对asp.net表单有很多经验。似乎只有经过身份验证的用户才允许访问images文件夹,并且在my web.config中有一个授权部分说,只有管理员才能访问该网站,那么如何使所有经过身份验证或其

当我在VisualStudio中通过调试模式运行我的网站时,一切看起来都很好,页面上的所有图像都显示得很好。但一旦我将我的网站部署到IIS7 web服务器上(怀疑其他版本会有什么不同,但你永远不知道),那么用户在登录之前无法看到网站上的图像

该网站是一个asp.net MVC网站,我是MVC新手,尽管我对asp.net表单有很多经验。似乎只有经过身份验证的用户才允许访问images文件夹,并且在my 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>

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


文件夹->.NET授权规则->添加允许规则

是否使用成员资格框架。我怀疑您在web.config中配置了错误的权限设置,并且您的图像文件夹仅允许授权请求。这可以通过web.config轻松更改。只需从您的授权部分删除文件夹名称,这将解决问题

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

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

在web.config文件中,在
标记后添加以下内容

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

其中
path=“images”
是包含图像/css的文件夹的名称

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


您还可以使用
[Authorize(“admin”)]

指定要授予访问权限的角色默认情况下,您在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文件。

旧问题,但我遇到了相同的问题并找到了答案。 我为会员页面创建了一个新文件夹,我希望登录用户能够访问该文件夹,但图像不会显示在其中! 事实证明,无论我尝试了什么,我都无法在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”
,等等,但都没有用


希望这个答案能帮助人们在将来更快地解决这个问题。

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

我们有一个类似的场景,一个包含所有png图像的文件夹。我们的营销同事想重命名其中的一些文件夹,因此为了方便她,我们共享了(这可能是关键)该文件夹,授予她读/写权限

从这一点开始,图像开始按照您描述的方式运行,需要授权才能访问。未经授权的用户再也看不到它们了

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

在检查文件夹并与其他文件夹进行比较后,我们发现在共享后,文件夹上的权限略有变化。主要是,它们不再从其父文件夹继承,一些权限(如创建者所有者和机器\名称\用户)已消失(尽管IUSR和应用程序池用户仍然存在)

所以,我们重命名了那个文件夹,创建了一个新的文件夹