访问路径被拒绝,Asp.net核心2.0在Ubuntu上运行

时间:2018-03-10 15:40:39

标签: c# ubuntu nginx asp.net-core kestrel

我无法使用下面的代码行。在我的开发机器(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 guide

中所述

我试图随机发出一些权限命令,因为我不是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 个答案:

答案 0 :(得分:1)

实际上,异常的是我的IFormFile的扩展方法。我尝试发布尽可能少的代码来使问题更紧凑但我认为这不再是一个好主意,我应该发布try catch块,因为它们在我的项目中。在我的代码中,我有类似的东西。 OBS。我只是测试,最后我摆脱了文字和过多的变量引用。

    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
}

这是我曾经遇到过的最令人讨厌的错误之一。 Fortuantely我遇到了解决我问题的post中的确切问题。我只是传递了目录。

在某种程度上,它可以在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);
        }
    }