【问题标题】:.Net Core 2.2 File.ReadAllBytes(fileName) throws System.UnauthorizedAccessException for UNC path.Net Core 2.2 File.ReadAllBytes(fileName) 为 UNC 路径抛出 System.UnauthorizedAccessException
【发布时间】:2019-10-07 19:57:33
【问题描述】:

我想在我的 .net core 2.2 应用程序中获取某个文件作为字节数组。该应用程序使用 iis 并像这样启动:

new WebHostBuilder()
                .UseKestrel(opt => opt.AddServerHeader = false)
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseStartup<Startup>();

站点的应用程序池使用专用服务用户。此用户具有共享访问权限,并且位于 UNC-Path-Folder 和文件的安全列表中。

但是,当我尝试像这样读取文件时:

_fileContent = File.ReadAllBytes("\\working\UNC\Path\File.pdf");

我得到以下异常:

System.UnauthorizedAccessException: Access to the path '\\working\UNC\Path\File.pdf' is denied.
   at System.IO.FileStream.ValidateFileHandle(SafeFileHandle fileHandle)
   at System.IO.FileStream.CreateFileOpenHandle(FileMode mode, FileShare share, FileOptions options)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize)
   at System.IO.File.ReadAllBytes(String path)

UNC 路径当前实际上是本地计算机上的一个目录。因此,我尝试使用 windows 路径 来加载文件,例如:“c:\Path\File.pdf”。这工作得很好!因此,我得出结论,该问题实际上与安全权限无关。

有人可以解释一下这个问题吗?

【问题讨论】:

  • 异常显示“System.UnauthorizedAccessException”,因此它与安全相关。您应该授予 ApplicationPool 对 UNC 共享的身份读取权限。

标签: asp.net-core .net-core iis-8 asp.net-core-2.2 unc


【解决方案1】:

感谢 UNOPARATOR 的评论,我找到了问题所在。由于直接使用 Windows 路径访问文件正常工作,因此安全性本身不会有问题,但是通过 unc 路径访问时出现异常,实际上很明显网络共享的安全设置存在问题。事实上,在再次分析共享后,我注意到我检查的共享设置不是在共享的根文件夹上,而是在共享内的子文件夹上。一旦我授予根共享的读取权限,一切正常!

【讨论】:

    猜你喜欢
    • 2010-10-15
    • 1970-01-01
    • 2012-06-16
    • 2019-08-06
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多