【问题标题】:System.UnauthorizedAccessException while saving a file保存文件时出现 System.UnauthorizedAccessException
【发布时间】:2012-09-05 08:32:55
【问题描述】:

我在 IIS6 上发布了我的网站。

通过 File.WriteAllText("C:\" + txtSaveExport.Text + ".CSV", b.ToString()); 保存文件时。它给出了一个错误:

em.UnauthorizedAccessException:对路径“C:\hj.CSV”的访问被拒绝。 ASP.NET 无权访问请求的资源。考虑向 ASP.NET 请求标识授予对资源的访问权限。 ASP.NET 有一个基本进程标识(通常是 IIS 5 上的 {MACHINE}\ASPNET 或 IIS 6 和 IIS 7 上的网络服务,以及 IIS 7.5 上配置的应用程序池标识),如果应用程序不是模拟的,则使用该标识。如果应用程序通过 模拟,则身份将是匿名用户(通常是 IUSR_MACHINENAME)或经过身份验证的请求用户。

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

如何处理?

【问题讨论】:

  • 完全不建议您这样做,但如果您只想这样做,请在您的 C 盘上授予写入权限Network Service
  • 我不想做先生。由于该网站将在何处运行,因此它会推断该组合。它需要给予许可。
  • 那么在这种情况下,您不应该在"C:\" 驱动器中写入,而应该使用特定文件夹,如“~\APP_DATA”应用程序文件夹,用于在asp.net 中进行此类操作。您必须在 app_data 文件夹上授予写入权限。
  • 对不起,先生,我需要保存在本地机器而不是服务器上。
  • 服务器端代码无论如何都无法访问客户端的机器。我建议您研究一下什么是 Web 应用程序?在编写下一个服务器端代码之前。

标签: asp.net iis-6


【解决方案1】:

您需要向该文件夹中的 Aspnet 用户授予写入权限。

看到这个: http://devnet.logixml.com/rdPage.aspx?rdReport=Article&dnDocID=209

最好的问候。

【讨论】:

  • 您好,我不需要将其保存在我的服务器上,而是保存在用户正在使用的本地机器上
  • 你假装在你客户的硬盘上写字? :-O 如果没有插件(applet、flash、ActiveX),这是不可能的。你应该阅读更多关于什么是和什么不是网络应用程序..
【解决方案2】:

写入 C: 驱动器下的变量目录不是一个好主意。我建议您不要授予在 C 下写入的权限,而是写入您的 Web 应用程序目录下的目录,您可以通过 Server.MapPath("~") 获得该目录。确保您将应用程序池的用户帐户的写入权限授予您应用目录下的任何文件夹,这样您会更安全。

【讨论】:

  • 我想把它保存在我的本地驱动器上
  • 哦,你的意思是你想用浏览器下载那个文件?如果是,请暂时在服务器上创建它,并在我在答案中提到的应用程序目录下的某个位置为其指定一个唯一名称。保存后,将用户重定向到文件。就像您将文件保存在 File.WriteAllText(Server.MapPath("~") + "myfile.txt") 一样,通过输入页面加载代码将用户重定向到该文件:Response.Redirect("/myfile.txt")
猜你喜欢
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多