【发布时间】:2017-02-01 14:57:39
【问题描述】:
我想将 pdf 从共享文件夹复制到项目文件夹。所以我使用 System.IO.File.Copy:
System.IO.File.Copy(@"\\netstore\IT\SIGN\112454.pdf", "C:\inetpub\wwwroot\myaspmvcwebapisite\temp\112454.pdf", true);
当我在我的机器上本地运行应用程序但当我将它发布到服务器并转到我得到的站点时,文件会复制:
signature-service.ts:120 {"$id":"1","Message":"An error has occurred.","ExceptionMessage":"Access to the path '\\\\netstore\\IT\\SIGN\\112454.pdf' is denied.","ExceptionType":"System.UnauthorizedAccessException","StackTrace":" at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)\r\n at System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite, Boolean checkHost)\r\n at System.IO.File.Copy(String sourceFileName, String destFileName, Boolean overwrite)\r\n at api.valbruna.local.Controllers.ValShip.SignatureController.Post(Int32 id)"}
如何授予对站点的访问权限以访问该文件位置?
请注意:
- 该站点是一个 MVC Web API INTRANET 应用程序
- 它使用基于 Windows 的身份验证
- 当我说本地主机时,我的意思是在 Visual Studio(IISExpress) 内
我尝试过的:
- 授予每个人对文件夹 \\netstore\IT\SIGN\ 的访问权限
我查看了有关堆栈溢出的其他帖子 (Access to the path is denied),但大多数答案都说授予对 IIS_USRS 的访问权限,并且我已授予所有人访问权限,因此这不起作用。
---更新1---
@Chris Pratt 我已根据您提供的链接更新了我的 IIS 设置。
- 身份字段已从 NetworkService 更新为 ApplicationPoolIdentity。
- 我授予对
<domainname>\<machinename>$的完全访问权限
---更新2---
@jp2code 我打开了网络发现,但仍然遇到同样的错误。
---更新3---
作为使用Impersonation class 访问共享文件夹的临时解决方法:
using (new Impersonator("username", System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName, "password"))
{
// code that executes under the new context.
sizingDoc.LoadFromFile(sigDocUrl);
}
【问题讨论】:
-
如果这是一台 Windows PC,请确保启用了“网络发现”。
-
@jp2code 感谢您的回复。我没有适当的授权来对服务器进行更改,所以我会让我的老板打开它。当他这样做时,我会告诉你的。
-
@jp2code 我打开了家庭或工作的网络发现,以及服务器上的域配置文件。但是,我仍然得到对路径 '\\\\netstore\\IT\\SIGN\\112454.pdf' 的访问被拒绝错误。还有其他建议吗?
-
你能重启两台电脑吗?或者,至少,注销并重新登录以强制重新加载所有设置。如果这不起作用,则一定是其他原因导致了您的问题。
-
@jp2code 我无法重新启动 PC,但我能够注销并重新登录。这不起作用,但由于某种原因,在其他帐户上使用模拟有效。 stackoverflow.com/questions/4957522/…我目前正在研究为什么我的用户帐户在模拟时无法访问netstore。但目前模拟管理员帐户可以访问网络存储上的必要文件。
标签: c# asp.net-mvc file asp.net-web-api system.io.file