Доступ к пути запрещен, Asp.net core 2.0 работает в Ubuntu

Я не могу использовать приведенную ниже строку кода. На моей машине разработки (Windows) это работает. Да, я занимаюсь разработкой приложения для Windows и развертыванием в Ubuntu. В следующем приложении я не буду этого делать.

Я получил сообщение об ошибке "Доступ к пути / var /... определен".

try
{
   Directory.CreateDirectory(dirInfo.FullName + "/" + numDirs);
}
catch(Exception e)
{
   return e.Message; // access to the path /var/... is defined
}

Я использую nginx в качестве прокси-сервера для Kestrel. Как описано в руководстве Microsoft

Я пытался запускать некоторые команды доступа случайным образом, так как я далеко не эксперт по Ubuntu, но метод CreateDirectory по-прежнему генерирует ошибку.

команды разрешения, которые я пробовал:

sudo chown -R www-data:www-data /var/www/PROJECTDIR

sudo find /var/PROJECTDIR -type d -exec chmod 770 {} \;
sudo find /var/PROJECTDIR -type f -exec chmod 660 {} \;

Я не устанавливаю свой проект в / var / www Я использую что-то вроде / var / anotherdir / anotherdir, это проблема?

1 ответ

Фактически, то, что было исключением, было моим методом расширения IFormFile. Я пытаюсь опубликовать как можно меньше кода, чтобы сделать вопрос более компактным, но я думаю, что это не очень хорошая идея, я должен был опубликовать блоки try catch, как они есть в моем проекте. В моем коде у меня было что-то вроде этого. обсервованный Я только тестирую, в конце концов я избавляюсь от литералов и чрезмерных ссылок на переменные.

    try
{
   Directory.CreateDirectory(dirInfo.FullName + "/" + numDirs);
   file.SaveAs(dirInfo.FullName + "/" + numDirs) // it was this that threw the exception.
}
catch(Exception e)
{
   return e.Message; // access to the path /var/... is defined
}

Это была одна из самых неприятных ошибок, которые у меня когда-либо были. К счастью, в этом посте я столкнулся с конкретной проблемой, которая решила мою проблему. Я передавал только каталог.

Как-то в Windows это работает, а в Linux - нет.

 public static void SaveAs(this IFormFile formFile, string filePath)
{
    using (var stream = new FileStream( filePath, FileMode.Create))
    {
        formFile.CopyTo(stream);
    }

}

Решение:

 public static void SaveAs(this IFormFile formFile, string filePath)
    {
        using (var stream = new FileStream( Path.Combine( filePath, formFile.FileName), FileMode.Create))
        {
            formFile.CopyTo(stream);
        }
    }
Другие вопросы по тегам