在vs2010中开发站点但改为本地IIS并提示

时间:2011-08-05 20:01:10

标签: visual-studio visual-studio-2010 iis-7

如果我在项目设置中使用“使用Visual Studio开发服务器”运行2010可视化工作室C#Web项目,我的应用程序可以正常打开,CSS呈现并呈现所有图像。

如果我更改项目的属性以使用本地IIS Web服务器,我尝试运行该项目。 我得到的提示几乎与我链接了多少图像/ css文件一样多。如果我一直单击取消,则会显示网页,但所有图像都丢失,并且不会呈现css文件(格式化看起来像地狱)。

我认为这应该是某种安全问题。我在Web配置文件中设置项目以使用“Windows”身份验证,我也启用了匿名访问。我添加了网络/网络服务帐户并授予了完整权利。我在本地计算机上添加了ASPNET帐户并提供了完全访问权限。我甚至添加了我的用户域,甚至非常绝望地让他们完全访问...

没有运气..我仍然会收到提示,如果我尝试直接在网址中浏览其中一个图片: http://localhost/mysite/images/myimage.jpg我收到错误:

  

访问被拒绝。描述:访问时出错   提供此请求所需的资源。你可能没有   查看所请求资源的权限。

     

错误消息401.3:您无权查看此目录   或使用您提供的凭据的页面(访问被拒绝,因为   访问控制列表)。

我不知道还有什么可以做或改变以使其发挥作用....

1 个答案:

答案 0 :(得分:1)

您看到的错误消息(错误消息401.3:您无权使用您提供的凭据查看此目录或页面(由于访问控制列表而拒绝访问))通常会发生,因为应用程序池用户执行Web应用程序没有对正在请求的css和图像文件的NTFS读取权限。

Web应用程序在应用程序池下运行,该应用程序池分配了一个用户。通过选中站点的“基本设置”,可以找到应用程序正在使用的应用程序池。

what app pool am I using

了解了您正在使用的应用程序池后,您可以通过选中“应用程序池”,为应用程序池选择“高级设置”,然后查看“高级设置” - >来查看配置为运行该应用程序池的用户。过程模型 - >身份。

what user is my app pool using

默认情况下,应用程序池设置为使用AppPoolIdentity用户(顺便说一句,如果您需要,该用户的用户名为IIS APPPOOL\ApplicationPoolName,因此在我的情况下,它将是IIS APPPOOL\mywebapp)。此用户是Users组和Authenticated Users组的成员。 如果您的应用程序池配置为使用AppPoolIdentity用户,解决您所遇到的权限问题的最简单方法是确保至少的Users组 阅读&执行列出文件夹内容,以及读取访问应用程序的Web根文件夹以及所有文件和子目录。在我的测试计算机上,Authenticated Users也允许所有访问权限,但完全控制除外。 (注意:为了正确起见,每当我在C:下创建一个新文件夹时,都会应用这些ACL。如果您愿意,您可以在不添加经过身份验证的用户或仅为用户指定读取权限的情况下离开。我是不打算确定这里需要的实际最小访问权限。)

要指定这些权限,请在Windows资源管理器中右键单击包含Web应用程序的文件夹,转到“属性”>单击安全性,单击编辑,然后使用添加添加组。请注意,添加组后,您可能需要单击“高级”按钮>更改权限>选中“替换所有子对象权限...”按钮,然后单击“确定”以授予该文件夹中所有子对象的权限(请参见下文)。完成此操作后,您可以检查其中一个.css文件以确保已正确添加组。

enter image description here

添加这些权限后,IIS应该能够提供css和图像文件。

作为旁注,如果您收到Windows登录提示,那么您很可能在IIS的“身份验证”部分为您的Web应用程序启用了“Windows身份验证 - 401挑战”(请参见下文)。如果未指定该设置,则在尝试查看没有正确ACL的文件时,将不会收到提示。相反,您将收到错误消息。提示将不会显示。

enter image description here

我使用Windows 7旗舰版和IIS 7.5验证了此信息,因此如果您使用的是其他操作系统YMMV,但我相信IIS应该按照描述进行操作。

希望有所帮助。如果您有任何疑问,请告诉我。