【问题标题】:Passing credentials to File.Move() in ASP.NET 4.0 & IIS7在 ASP.NET 4.0 和 IIS7 中将凭据传递给 File.Move()
【发布时间】:2014-12-19 13:29:41
【问题描述】:

我有一个在 IIS7 上运行的 asp.net Web 应用程序,它的 AppPool 标识设置为“网络服务”并且托管管道模式 = 经典。

web.config 包含以下安全设置...

<system.web>
    <identity impersonate="true"/>
    <authentication mode="Windows" />
</system.web>

网络应用从第三方下载数据并在网络应用服务器上创建文件。然后通过此命令将这些文件传输到另一台服务器。

  System.IO.File.Move(sourcePathAndFilename, destinationPathAndFileName);

当我以高级用户身份从服务器运行应用程序时,它运行良好。 当我从客户端计算机以任何用户身份运行应用程序时,它会失败。 当我从服务器以低级别授权用户身份运行应用程序时,它会失败。

错误是 HTTP 401 未经授权的访问。

我 100% 确定用户和网络服务对源文件夹和目标文件夹都有足够的权限。因此,似乎 File.Move() 命令正在作为其他东西执行,但是谁/什么?

在不更改 AppPool 设置的情况下,网络应用是否可以通过用户凭据传递给 File.Move() 命令?

【问题讨论】:

    标签: c# asp.net iis-7


    【解决方案1】:

    您可以在this question 中找到您所需要的一个很好的实现

    使用 using 语句添加特定类后,您可以执行 File.Move

    只是

    using (new NetworkConnection(@"\\server\path", Credentials)) {
       System.IO.File.Move(sourcePathAndFilename, destinationPathAndFileName);
    }
    

    【讨论】:

    • 我想知道为什么这个问题不是stackoverflow.com/questions/295538/…的重复项
    • @JohnSaunders 如您所见,我已经链接了该问题,NetworkConnection 是在该问题中实现的类。我只在 OP 问题和另一个以不同方式显示问题的 SO 问题之间进行了匹配。
    • 我只是听起来这个问题应该作为该问题的副本关闭。除非出于对您接受的答案的尊重,否则我早就这样做了。
    猜你喜欢
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    相关资源
    最近更新 更多