API使用.NET Core 3.1,文件夹结构如下:
溶液
--项目1
--项目2
其中Project 2
依赖于Project 1
,是入口点。
API托管在kubernetes上,NFS共享挂载在/storage
上。API将需要检索和提供此文件共享中的文件。所以我在Project2
中的startup.cs
中使用了以下代码:
app.UseFileServer(new FileServerOptions()
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), @"storage")),//this will return /app/storage
RequestPath = new PathString("/resources")
});
我知道其中一个文件是通过检查:
System.IO.File.Exists(@"/app/storage/test.JPG");
然而,当我试图通过http://myapiurl/resources/test.JPG
访问文件时,我总是得到一个404 not found
。
我在想我错过了什么?
3条答案
按热度按时间jv4diomz1#
您正在使用
UseFileServer
,但您没有启用目录浏览或提供默认文件,因此我建议您使用UseStaticFiles
。启用此功能的最简单方法是将以下内容放在
Configure()
方法中的Startup.cs
文件中。我猜这对你不起作用的原因是,当在K8中运行时,
Directory.GetCurrentDirectory
不会产生与你在本地运行时看到的相同的路径,所以它最终不会指向/app/storage(这就是为什么你的File.Exists
检查工作正常,因为你没有动态构建路径)。使用一些日志记录来验证它在运行时是否从配置中的正确路径拉取。
xfyts7mz2#
我在使用ingress从AppService切换到k8s后遇到了类似的静态文件问题。原来是URL中的大小写敏感问题。有些目录是“”,但在路径中,我有所有“”的字母。它可以在Windows和AppService上本地工作,但不能在k8上工作。
disbfnqx3#
有两种方法来提供静态文件,即内容和Web根目录
Webroot用于提供公共和静态资源文件,如css,html,js等。
您需要在启动类中启用静态文件,并使用“IWebHostEnvironment”从wwwroot文件夹读取静态内容。
阅读全文here