.Net Core 2.2 File.ReadAllBytes (fileName) создает исключение System.UnauthorizedAccessException для пути UNC - PullRequest
0 голосов
/ 07 октября 2019

Я бы хотел получить определенный файл в виде байтового массива в моем приложении .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". И это работает просто отлично ! Поэтому я пришел к выводу, что проблема на самом деле не имеет ничего общего с разрешениями безопасности.

Может кто-нибудь подсказать этот вопрос?

1 Ответ

1 голос
/ 08 октября 2019

Благодаря комментарию UNOPARATOR я нашел проблему. Поскольку доступ к файлу напрямую через путь Windows работал, это не могло быть проблемой с самой безопасностью, но поскольку доступ по пути unc дал исключение, на самом деле очевидно, что существует проблема с настройками безопасности общего сетевого ресурса. И действительно, после повторного анализа общего ресурса я заметил, что проверил настройки общего ресурса не в корневой папке общего ресурса, а в дочерней папке внутри общего ресурса. Как только я дал разрешение на чтение в корневой папке, все работало нормально!

...