22

我刚刚在 Windows XP 上安装了 IIS。

当我尝试执行应用程序时,出现错误:

拒绝访问路径“c:\inetpub\wwwroot\myapp\App_Data”。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.UnauthorizedAccessException:对路径“c:\inetpub\wwwroot\myapp\App_Data”的访问被拒绝。

ASP.NET 无权访问请求的资源。考虑向 ASP.NET 请求标识授予对资源的访问权限。ASP.NET 有一个基本进程标识(通常是 IIS 5 上的 {MACHINE}\ASPNET 或 IIS 6 上的网络服务),如果应用程序不模拟,则使用该标识。如果应用程序通过 模拟,则身份将是匿名用户(通常是 IUSR_MACHINENAME)或经过身份验证的请求用户。

要授予 ASP.NET 对文件的访问权限,请在资源管理器中右键单击该文件,选择“属性”并选择“安全”选项卡。单击“添加”以添加相应的用户或组。突出显示 ASP.NET 帐户,然后选中所需访问权限的复选框。

源错误:

第 70 行:Protected Sub cmbSettingFiles_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) 处理 cmbSettingFiles.SelectedIndexChanged
第 71 行:Dim doc As XmlDocument = New XmlDocument()
第 72 行:doc.Load(Path.Combine(basePath, cmbSettingFiles. SelectedValue)) 第 74 行:Dim settingsNode As XmlNode = doc.SelectSingleNode("/settings")

源文件:C:\myapp\install\install.aspx.vb 行:72

我已经尝试通过这样做来获得许可:

要授予 ASP.NET 对文件的访问权限,请在资源管理器中右键单击该文件,选择“属性”并选择“安全”选项卡。单击“添加”以添加相应的用户或组。突出显示 ASP.NET 帐户,然后选中所需访问权限的复选框。

但错误仍然存​​在。

这和我的代码有什么关系吗?

我该如何解决这个问题?

编辑

我已经在我的开发机器上解决了这个问题,但我的网络服务器上仍然出现错误。

谢谢。

4

13 回答 13

30

如果您收到此错误,您可能正在尝试写入wwwroot. 默认情况下这是不允许的,这是有充分理由的

相反,请考虑将文件存储在wwwroot. 如果您只需要提供文件,请将它们存储在外部的文件夹中inetpub并使用虚拟目录使它们对 IIS 可见。

原答案:


对于在 Windows Server 上运行 IIS 的用户:

默认情况下,IIS 用户没有wwwroot文件夹的写入权限。这可以通过授予IIS_IUSRS用户完全权限来解决wwwroot

  1. 打开文件资源管理器并转到C:/inetpub/
  2. 右键单击 wwwroot,然后单击“属性”
  3. 转到安全选项卡并单击“编辑...”以编辑权限
  4. 查找并选择 IIS 用户。就我而言,它被称为IIS_IUSRS ([server name]\IIS_IUSRS).
  5. 为所有权限选择“允许”复选框。
于 2017-07-10T14:59:47.553 回答
14

尝试转到 App_Data 文件夹属性并添加具有读写权限的 ASPNET 用户

参考:
如何为 WebMail Pro 的 App_Data 文件夹分配正确的权限 ASP.NET
对 APP_DATA 文件夹
ASP/ASP.NET 的权限 处理写权限的最佳方式?

如果它不能解决您的问题,请检查您的 XML 文件是否未被使用这些配置文件的另一个线程打开。如果仍然存在,请提供更多详细信息。

于 2012-04-21T07:47:04.413 回答
6

考虑如果您的文件是只读的,那么额外的参数可能有助于FileStream

using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read))
于 2013-04-24T02:33:33.610 回答
2

您确定要添加正确的用户吗?您是否检查过为您的应用程序池设置了哪个用户?

如果由于某种原因无法读取文件,也会发生此错误;例如文件被锁定或被另一个应用程序使用。由于这是一个 ASP.NET Web 应用程序,您需要确保您没有执行任何需要锁定文件的操作;除非您可以保证您的页面上一次只有一个用户。

您能否发布一个如何访问该文件的示例?它是什么类型的文件?代码片段将帮助您获得更准确的答案。

于 2012-04-21T03:01:20.897 回答
2

我也有类似的情况。我正在使用 TFS 进行源代码控制。我发现,当它被签入时,它使文件只读。这在我的服务中导致了上述错误,它正在以读/写方式打开它们。一旦我检查了它们进行编辑。一切都很好。我正在考虑尝试在服务中以只读方式打开它们。我认为一旦它们发布到生产服务器,这不是问题。仅在开发环境中。我在使用实体框架的服务中看到了类似的问题。如果签入 .svc 文件,则无法通过 EF 更新数据库。

于 2013-12-13T15:01:26.330 回答
2

我尝试添加具有所有权限的 ASP.net v4.0,添加 NETWORK SERVICE 用户但没有任何帮助。最后,在 App_Data 文件夹中添加 DefaultAppPool 用户的 MODIFY 权限,问题解决。

于 2015-08-10T06:43:54.597 回答
0

尝试向 NETWORK SERVICE 用户授予权限。

于 2014-01-24T07:08:37.023 回答
0

请以管理员权限运行 Visual Studio ..这个问题为我解决了..

拒绝访问路径 C:\inetpub\wwwroot 被拒绝表示自助服务网站无法访问安装它的服务器上的特定文件夹。这可能是因为该位置不存在,或者是因为身份验证用户没有任何权限应用于写入该位置。

于 2015-12-07T07:53:11.310 回答
0

另一个原因可能是因为您尝试写入的文件路径为空,这就是它找不到它的原因。这只是发生此错误的另一个原因。

于 2017-03-16T05:14:50.250 回答
0

对我来说,我已经在 wwroot D:\working directory\OnlineExam\wwwroot\excel 中创建了一个名为 excel 的文件夹,并且我试图复制一个名为 excel 的文件,该文件已经作为文件夹名称存在。所需的路径是 D:\working directory\OnlineExam\wwwroot\excel\finance.csv 所以根据我将代码更改如下

string copyPath = Path.Combine(_webHostEnvironment.WebRootPath, "excel\\finance");
                    questionExcelUpload.Upload.CopyTo(new FileStream(copyPath, FileMode.Create));

基本上检查是否已经存在与您的路径同名的文件夹或文件。

于 2020-04-07T06:42:13.350 回答
0

我遇到了同样的问题,并且我承认花了更多的时间,特别是因为我能够将文件写入同一个文件夹。

只有在测试了十几个其他东西之后,我才意识到我的“路径”变量只有目录,没有文件名!糟糕,糟糕的错误信息!

前:

string path = Server.MapPath("~/App_Data/SpecialFolder"); 

后:

string path = Path.Combine(
      Server.MapPath("~/App_Data/SpecialFolder"),
      filename); //NOTE: will cause Access Denied if filename is missing or empty!

原始错误也可能不是由于拒绝访问,而是因为选择的“文件名”是一个空字符串。

于 2021-09-17T04:31:48.840 回答
-1

我终于找到了 2019 年的答案。您需要将“IIS APPPOOL\DefaultAppPool”添加到对要修改的目录具有安全权限的用户列表中。确保他们拥有完整的权利。

于 2019-06-17T23:19:55.543 回答
-1

我创建了我的 inet 文件夹的副本,以复制该站点。它显示“拒绝访问 .../App_Data/viewstate/1/6/6/0 ...”。检查时显示 app_data 文件夹添加了 IIS_IUSER 但未检查修改或写入访问权限。只需选中这些框,实例就会开始运行。

于 2020-08-24T10:23:38.940 回答