我想将 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 的身份验证
- 当我说本地主机时,我的意思是在视觉工作室(IISExpress)中
我试过的:
- 授予每个人对文件夹 \\netstore\IT\SIGN\ 的访问权限
我查看了堆栈溢出的其他帖子(拒绝访问路径),但大多数答案都说授予对 IIS_USRS 的访问权限,并且我已授予每个人访问权限,因此这不起作用。
---更新1---
@Chris Pratt 我已根据您提供的链接更新了我的 IIS 设置。
- 身份字段已从 NetworkService 更新为 ApplicationPoolIdentity。
- 我授予对
<domainname>\<machinename>$
---更新2---
@jp2code 我打开了网络发现,但仍然遇到同样的错误。
---更新3---
作为使用Impersonation 类的临时解决方法,可以访问共享文件夹:
using (new Impersonator("username", System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName, "password"))
{
// code that executes under the new context.
sizingDoc.LoadFromFile(sigDocUrl);
}