【问题标题】:Access to the path is denied in ASP.Net在 ASP.Net 中拒绝访问路径
【发布时间】:2021-04-13 03:17:54
【问题描述】:

我有一个在 IIS 中运行的 ASP.Net 应用程序,它使用 CsvWriter 在指定位置创建一个文件。如果我使用完整的 UNC 路径,我会收到拒绝访问路径的错误,但是如果我使用驱动器号,它可以正常工作。令我不解的是,它确实适用于开发环境中的 UNC 路径。

创建文件的代码

using (var writer = new StreamWriter(fileName))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
    {
    csv.WriteField("Foo");
    csv.WriteField("Bar");
    csv.NextRecord();
    }

遵循各种帖子的建议,例如 Access to the path is denied 和 IIS7 Permissions Overview - ApplicationPoolIdentity 和 MS Documentation: Application Pool Identities。我最初确信我的问题与安全有关。应用程序可以在使用我的用户凭据的开发环境 (IIS Express) 中完美运行,但不能在使用应用程序池标识的 IIS 下完美运行,这一事实支持了这一点。我授予 MyApplicationPoolIdentity 对特定目录的完全访问权限,但无济于事。

但是,我发现如果我使用驱动器号 (C:\myDirectory\mySubDirectory\myFile.csv) 而不是 UNC 路径 (\\myServer\myDirectory\mySubDirectory \myFile.csv)在生产中完美地创建了文件。尽管我的应用程序正在运行,但我担心的是我的 IIS 或我的服务器可能有一些配置问题,这可能会在以后咬我。所以我的问题是什么会导致创建文件/写入失败使用 UNC 路径而不是使用驱动器号?

我使用的是 Windows Server 2016。

谢谢 托尼

【问题讨论】:

    标签: c# asp.net iis application-pool


    【解决方案1】:

    我认为这是由权限问题引起的。首先,您是否收到任何相关的错误消息?或者你可以试试以下方法:

    1.您可以使用Process Monitor查看正在使用哪个帐户访问共享以及需要什么权限。

    2.检查以确保运行 IIS 的帐户对麻烦的 UNC 具有所需的权限。

    【讨论】:

    • 我也认为它的权限。我使用了进程监视器,当使用驱动器号 (C:\myDirectory...) 时,进程 w3wp.exe 能够在进程 IIS APPPOOL\MyAppPool 下创建文件。当我使用 UNC 路径 (\\MyServer\myDirectory...) 时,具有相同用户的相同进程会得到结果 ACCESS DENIED。这告诉我它不能是用户权限。
    • 既然是权限问题,那么只需要给iis账号UNC权限即可。您使用什么身份验证方法?在应用程序池标识中,您可以设置自定义帐户并为各个帐户使用域用户。现在它使您能够从 UNC 路径写入和读取文件。
    • 我正在使用 IUSR 进行匿名身份验证,我也尝试过使用应用程序池身份。由于我们有一个严格的 IIS 管理环境,我很犹豫是否使用域用户作为应用程序池标识。您的评论将我指向此线程link,其中答案引用了服务器 2008 上 iis 7 中的错误,该错误再次指向身份验证。我使用的是 2016,所以我怀疑这个修补程序与我有关。感谢您的建议
    猜你喜欢
    • 2013-05-12
    • 1970-01-01
    • 2013-12-15
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多