我最近遇到了一个错误,试图用IIS托管我的asp.net站点。我找到了一个很多人信誓旦旦的解决办法。

解决方案: 对文件夹中的文件添加具有读权限的IIS_IUSRS 修改IIS认证方式为BasicAuthentication 刷新网站。会有用的

(http://vivekthangaswamy.blogspot.com/2009/07/aspnet-website-cannot-read.html)

我在我的网里加了什么?配置文件?我以前从来没编辑过。以下是其当前内容:

<?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
    <connectionStrings>
  <add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True"
   providerName="System.Data.SqlClient" />
 </connectionStrings>
 <system.web>
  <compilation debug="true" strict="false" explicit="true" targetFramework="4.0"/>
    </system.web>
</configuration>

我的错误是:

配置错误:由于权限不足,无法读取配置文件 配置文件:\?\ C: \用户* * * * *网站视觉Studio2010 \ \文件\ \ PointsForTime \ web . config


你不需要改变你的web.config中的任何东西。

问题在于文件系统权限。您的文件权限不允许IIS_IUSRS用户访问web。配置(或可能是任何文件)。更改他们在windows中的文件权限,允许IIS_IUSRS帐户访问它。


您的web.config没有问题。你的网站在一个进程下运行。在iis中,您可以定义该进程的标识。您网站的应用程序池运行的身份(网络服务,本地系统等),应该有访问和读取web的权限。配置文件。

更新:

这个更新后的答案和上面的一样,但更长、更简单、更完善。

首先:您不必更改配置文件中的任何内容。没关系。问题出在windows文件权限上。

出现此问题是因为您的应用程序无法访问和读取web。配置文件。

使IIS_IUSRS组可以访问该文件。只需右击网页。单击“属性”,在“安全”页签下添加IIS_IUSRS。

这个IIS_IUSRS是什么?

你的网站就像一个exe文件。就像任何exe文件一样,它应该由用户启动,并根据分配给该用户的权限运行。

当你的网站在IIS中启动时,你的网站的应用程序池与一个用户相关联(网络服务、本地系统等. ...)(并且可以在IIS中更改)

因此,当您说IIS_IUSRS时,它意味着您的站点以任何用户(网络服务、本地系统等. ...)运行。

正如@Seph在下面的评论中提到的:如果你的计算机在某个域上,请记住IIS_IUSRS组是一个本地组。 另外,当您试图找到这个用户时,请检查位置,它应该设置为本地计算机,而不是公司域。


出于某种原因,你的网。Config设置为只读。取消选中web的只读选项。配置文件。


转到父文件夹,右键单击并选择属性。选择“安全”选项卡,编辑权限并添加。单击“高级”和“立即查找”。选择“IIS_IUSRS”,单击“确定”,然后再次单击“确定”。确保你有检查写。单击“确定”,再单击“确定”。

完成工作!


我在网上也遇到了同样的权限问题。配置文件。

但是,我的问题是由于IIS无法加载配置文件,因为它包含URL重写规则,并且我没有在新服务器上安装IIS URL重写模块。

解决方案是安装重写模块。


我使用subst创建了从D:到C:的映射,以便与团队中的其他开发人员保持相同的设置。这也给了我相同的错误描述。把这个拿掉,我就把它修好了。


编者注:按照这个答案的建议做:“将身份更改为LocalSystem”是危险的!LocalSystem帐户是一个… 完全受信任的帐户,比管理员帐户更受信任。这个帐户在单个机器上没有什么是不能做的,它有权作为机器访问网络(这需要Active Directory并授予机器帐户权限)


将标识从ApplicationPoolIdentity更改为LocalSystem即可;)。

我使用的是win7 64和IIS 7.5

更多关于 iis7.5和win7中的应用程序池标识


我需要添加权限到IUSR(除了ISS-IUSRS,正如其他人建议的那样)。 (参见: http://codeasp.net/blogs/raghav_khunger/microsoft - net/2099/iis - 7 - 5 - windows 7 - http错误- 401 - 3 -未经授权)


我们在apppool中使用特定的身份运行一个网站,只有在给予该用户对包含web的文件夹的读访问权之后。配置会起作用。 在添加“everyone”用户read后,我们追踪到这一点,一切工作正常。


我也收到了“由于权限不足而无法读取配置文件”的提示。结果是IIS中的ISAPI和CGI限制。NET 4.0 32位和64位被设置为拒绝。把它们都标记为允许修正了我的问题。


对我来说,在我的本地机器上调试时出现了这个错误,结果证明与基础web有关。config,它是由. net框架在编译网站时启动的。我的C:\Windows\ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ web。配置文件有一个无法识别的元素(folderLevelBuildProviders)。修复此修复了500.19错误。

请注意:IIS管理器无法在。net 4应用程序上配置。net编译


将流程模型标识更改为LocalSystem为我解决了这个问题。如果右键单击应用程序池并选择“高级设置”,就可以找到这个设置。我正在运行iis7.5。


当您将权限授予IIS_IUSRS时,您应该在Web应用程序的IIS/身份验证部分检查匿名身份验证凭证使用应用程序池标识而不是IUSR。


在虚拟应用程序中遇到此问题。所有权限都设置好了。 IIS_IUSRS, AppPoolIdentity,然后给Everyone完全的访问权。毫无效果。重新启动了应用程序,站点和IIS,但是不行。

删除虚拟应用程序并重新添加它,然后它开始工作。

真希望我知道是什么解决了这个问题。


检查文件是否被标记为只读,不管是否有IIS_IUSRS权限,它都会显示相同的消息。


我有这个错误消息,原来是由于我的物理文件夹位于网络驱动器,而不是本地驱动器。在默认情况下,这些驱动器上的权限似乎是不同的。例如,虽然本地驱动器位置为本地计算机的用户提供了权限,但网络位置却没有。

此外,接受的答案并不适用于这种情况。无法为本地用户或IIS用户分配权限。解决方案是将物理文件夹移动到本地驱动器。


当我试图与另一个用户共享站点根文件夹时,我也遇到了同样的问题。某些文件夹失去权限。 因此,我按照Afshin Gh建议的步骤向IIS_IUSRS组添加权限。 问题是这个小组不适合我。我用的是windows 7。

我所做的只是改变了一些步骤:

右键单击父文件夹(失去权限的人), 属性=>安全=>在“组或用户名:”中, 单击Edit…… 将打开“权限文件夹”窗口。 在“组或用户名:”中按ADD…btn, 输入Authen并按检查名称, 您将看到完整的组名“Authenticated Users” 按ok =>应用。 这将再次启用特权。

这对我很管用。


使IIS_IUSRS组可以访问该文件。右键点击你的网页。展开属性,在“security”页签下添加“IIS_IUSRS”。给予组读/写权限。

当组不可用时,将IIS_IUSRS替换为ComputerName\IIS_IUSRS


我有同样的问题,在做了所有写在这里作为答案的东西之后,它仍然复制。 问题的第二部分是。net在“打开或关闭Windows功能”下被关闭了。


在我的例子中,我试图从映射的驱动器(subst)托管页面。 问题是subst是在我的帐户下运行的,IIS用户无法看到相同的驱动器


右击Web。Config =>选项卡安全=>按钮编辑=>按钮添加=>按钮高级=>按钮立即查找=>在搜索结果中选择您的组(在我们的例子中是“IIS_IUSRS”)=> Ok=> Ok=> Ok


当IIS应用程序有一个物理路径包含正斜杠/而不是反斜杠\的虚拟目录时,我们就遇到了这种情况。这是在我们的持续交付过程中使用IIS的powershell管理API意外完成的。

错误配置示例- applicationHost.config . Config

<application path="/MySite/MyService" applicationPool="MyAppPool" enabledProtocols="http">
    <virtualDirectory path="/" physicalPath="C:\inetpub\MySite/MyService" />
</application>

确保physicalPath属性不包含正斜杠/,只包含反斜杠\

- applicationHost.config . Config

<application path="/MySite/MyService" applicationPool="MyAppPool" enabledProtocols="http">
    <virtualDirectory path="/" physicalPath="C:\inetpub\MySite\MyService" />
</application>

有时如果它是一个新的服务器,你需要配置或安装ASP。IIS上的NET特性,使它能够读取您的web。配置文件。

对我来说,这就是原因。


我通过为应用程序池用户(WIN SERVER 2008 R2)添加读权限来解决这个问题: C:\Windows\System32\inetsrv\config

一点背景知识: 我们的服务器被黑客使用经典的错误,应用程序用户有更多的权限,它应该(本地管理)。

为了解决这个问题,我们创建了一个新的域用户,它只对应用程序文件夹有权限,并将其分配为应用程序池用户。然后我们遇到了问题,这是我们问题的解决方案。


将项目转移到C以外的驱动器: 我也犯了同样的错误。


我给了许可,并使用ICACLS.exe,但没有工作。然后我改变了物理路径,它成功地工作了。

(IIS 8.5 windows 2012 R2)


公认的解决方案并不适合我。我使用一个Git回购,它克隆到下面的文件夹

c:\users\myusername\source\repos\myWebSite

我制作了新的IIS网站,并将其指向路径。它没有接受的解决方案中建议的iis_iusrs权限。当我添加权限时,它仍然不起作用。

当我给'Users'组以下权限和继承级联权限web.config时,它才开始工作。也许应该把它只用在网络上。配置减少攻击表面积。


当然,这是一个权限问题。我采取了以下步骤,它对我有效。

在左上角选择你的网站或应用程序。在大多数情况下,它将在默认网站。 在IIS管理器7或以上版本的右上角单击“基本设置”。 单击连接为按钮。 使用“特定用户”,点击设置按钮。 输入用户名和密码。像域\用户名。对我来说就像 ABC\rrajkumar输入密码。 重启IIS,浏览你的网站。现在应该可以了。


进入IIS(站点) 右击网站内的项目。输入图像描述 在这里

点击编辑权限。

去保安那儿。 点击编辑按钮。 单击添加按钮。类型COMPUTER_NAME \ IIS_USERS 或 点击前进。 单击“立即查找”按钮。 还有选择的余地。 选择IIS_USERS,点击ok…ok....ok .


我也遇到过同样的问题,但这些解决方案都对我不起作用。我一直得到相同的错误和一个关于“未能开始监视更改”在事件查看器。

唯一有效的方法是复制文件夹并将其重命名。它一定是一个损坏的文件夹在Windows IIS/ASP。NET无法访问。


确保你的网。配置文件没有标记为只读


所有给出的答案都是有效的,并在不同的情况下工作。

对我来说,重新启动Visual Studio起作用了。


我在Windows 10上使用microsoftaccount\email@contosa.com帐户运行应用程序池时遇到了这个问题(例如,用Microsoft帐户而不是本地帐户登录PC)。

显然在我的电脑上有些东西损坏了;删除IIS并重新添加它没有任何作用(因为IIS元数据库似乎没有被删除)。删除和重新创建应用程序池也无济于事。

我的解决方案是创建一个新的应用程序池,使用相同的设置,但名称不同。这为我解决了问题;显然,有些东西已经损坏了与appool,即使删除它,重新添加它与相同的名称不会修复。


我在localhost/MyApp上运行一个网站,通过Visual Studio自己创建的虚拟目录构建和运行。

我的“解决方案”是删除虚拟目录,让Visual Studio重新创建它。


如果应用程序位于虚拟目录中,而文件的路径是映射驱动器,就会发生这种情况。

如果您将文件的路径更改到本地驱动器,这将解决问题,如果这确实是您的问题。


我尝试了以前的大部分建议,但都没有用。我无法重新加载网站,所以我编辑了.csproj文件并更改了端口号,它立即工作了:

 <WebProjectProperties>
      <UseIIS>True</UseIIS>
      <AutoAssignPort>True</AutoAssignPort>
      <DevelopmentServerPort>**4000**</DevelopmentServerPort>
      <DevelopmentServerVPath>/</DevelopmentServerVPath>
      <IISUrl>http://localhost:**4000**/</IISUrl>
      <NTLMAuthentication>False</NTLMAuthentication>
      <UseCustomServer>False</UseCustomServer>
      <CustomServerUrl>
      </CustomServerUrl>
      <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
    </WebProjectProperties>

编辑.csproj文件


上面的答案很有帮助,但如果这对任何人都有帮助的话——我有一个确切的问题,结果是我(windows网络)共享了站点托管的根文件夹。我们终止了共享,并添加了用户权限来读取/执行,它再次工作得很好。

我怀疑是股票搞砸了。


我将. net CLR版本设置为No Managed Code,一切都开始正常工作。


不像IIS_IUSRS那样授予所有IIS用户访问权,您也可以使用站点仅授予应用程序池标识访问权。这是微软推荐的方法,更多信息可以在这里找到:

https://support.microsoft.com/en-za/help/4466942/understanding-identities-in-iis

https://learn.microsoft.com/en-us/iis/manage/configuring-security/application-pool-identities

Fix:

首先查看上面的配置文件参数,以确定需要访问的位置。在本例中,需要访问整个发布文件夹。右键单击文件夹,选择属性,然后选择Security选项卡。

点击编辑…然后添加....

现在看看Internet信息服务(IIS)管理器和应用程序池:

在我的情况下,我的网站在LocalTest应用程序池下运行,然后我输入名称IIS appool \LocalTest

按“检查名称”键,就会找到用户。

给用户所需的访问权限(默认:读取和执行,列出文件夹内容和读取),一切都应该工作。


在某些情况下是网络。配置文件格式不正确。 打开网络。配置并粘贴以下代码:

<?XML版本="1.0"编码="utf-8"?> < >配置 > < /配置