我有一个带有以下代码的.NET Core 2.1应用程序:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), "Assets")),
RequestPath = "/Assets"
});
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseMvc();
}
和我的结构文件夹:
但这些网址均无法打开图片:
“ my-website.com/images/snes/alien.jpg”
“ my-website.com/wwwroot/images/snes/alien.jpg”
“ my-website.com/Assets/Snes/alien.jpg”
有人知道怎么了吗?
编辑:这是通过CurrentDirectoy()方法获取的文件夹(显然是正确的):
Edit2:使用此代码可在localhost上运行,但当我在Azure上发布时不起作用:
app.UseFileServer(
new FileServerOptions()
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot"))
});
答案 0 :(得分:2)
答案 1 :(得分:1)
使用IHostingEnvironment
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, "Assets")),
RequestPath = "/Assets"
});
答案 2 :(得分:0)
您很可能位于与您认为不同的工作目录中。请通过在foo上设置断点来检查此问题:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
var foo = Directory.GetCurrentDirectory();
}
解决方案取决于您如何启动应用程序。
如果通过Visual Studio进行操作,可能是在“项目”属性中设置了另一个“工作目录”?
如果通过命令行,则需要cd
到项目根目录。
另一种解决方案是使用directory of your assembly:
// get the directory
var assemblyDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
var assetDirectory = Path.Combine(assemblyDirectory, "Assets"));
// use it
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(assetDirectory),
RequestPath = "/Assets"
});