我是 ASP.NET Core 的新手,正在构建应用程序。在本地工作的功能之一是上传文件并将其保存到我创建的 wwwroot/uploads 文件夹中。
我在保存此文件以及稍后在本地访问或下载此文件时没有遇到任何问题。在我开始使用 Elastic Beanstalk 部署我的应用程序后,我在尝试上传文件时反复收到以下错误:
“UnauthorizedAccessException:访问路径 'C:\inetpub\AspNetCoreWebApps\AppName\wwwroot\uploads\filename.txt' 被拒绝。”
通过谷歌搜索这个问题,我添加了一个 .ebextensions 文件夹来存放配置文件,以添加写入权限并将此文件夹添加到我的源包中。我的理解是设置如下:
source bundle zip:
-deployment manifest
-source code folder:
-all dlls
-wwwroot folder
-.ebextensions folder added here
此时,我尝试创建一个 JSON 配置文件,但我仍然遇到同样的错误。我尝试创建一个 YAML 配置文件,但我仍然遇到同样的错误。
YAML 文件:
container_commands:
01-changeperm:
command: icacls "C:/inetpub/AspNetCoreWebApps/AppName/wwwroot" /grant DefaultAppPool:(OI)(CI)F /T
JSON 文件:
{
"container_commands": {
"01": {
"command": "icacls "C:/inetpub/AspNetCoreWebApps/AppName/wwwroot" /grant DefaultAppPool:(OI)(CI)F /T"
}
}
}
如果有人对堆栈中断时感到好奇:
UnauthorizedAccessException:拒绝访问路径“C:\inetpub\AspNetCoreWebApps\AppName\wwwroot\uploads\filename.txt”。
System.IO.FileStream.ValidateFileHandle(SafeFileHandle 文件句柄)
System.IO.FileStream.CreateFileOpenHandle(FileMode模式,FileShare共享,FileOptions选项)
System.IO.FileStream..ctor(字符串路径,FileMode模式,FileAccess访问,FileShare共享,int bufferSize,FileOptions选项)
FileHelper.cs 中的 AppName.Utilities.FileHelper.WriteFileToFolder(IFormFile formFile, string filePath) HomeController.cs 中的 AppName.Controllers.HomeController.Create(FileUpload 模型)
-
如何判断我的配置文件是否正在运行?我没有看到它们在 EBS 上作为事件运行,这是我知道的唯一可以查找它们的地方。
或者,配置文件本身是否设置错误?
最后,有人对这里可能出现的其他问题有什么建议吗?我是 ASP.NET Core 和 EBS 的新手,因此非常感谢所有反馈。
最佳答案
容器命令从暂存目录运行,您的源代码在部署到应用程序服务器之前会在该目录中提取。当源代码部署到其最终位置时,您使用容器命令对暂存目录中的源代码所做的任何更改都将包含在内。
运行这些配置命令时,唯一存在的文件夹是 C:/inetpub/AspNetCoreWebApps,这就是您的命令不起作用的原因,详细信息是 here
正确的命令是
{
"container_commands": {
"01": {
"command": "icacls \"C:/inetpub/AspNetCoreWebApps\" /grant DefaultAppPool:(OI)(CI)F"
}
}
}
关于c# - 如何使用 C# ASP.NET Core 应用程序通过 Elastic Beanstalk 设置对特定文件夹的权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56588765/