asp.net核心未加载静态文件

时间:2019-01-14 01:35:26

标签: c# asp.net-core .net-core kestrel-http-server

我有一个带有以下代码的.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();
    }

和我的结构文件夹:

enter image description here

但这些网址均无法打开图片:

“ my-website.com/images/snes/alien.jpg”

“ my-website.com/wwwroot/images/snes/alien.jpg”

“ my-website.com/Assets/Snes/alien.jpg”

有人知道怎么了吗?

编辑:这是通过CurrentDirectoy()方法获取的文件夹(显然是正确的):

enter image description here

Edit2:使用此代码可在localhost上运行,但当我在Azure上发布时不起作用:

 app.UseFileServer(
        new FileServerOptions()
        {
            FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot"))
        });

3 个答案:

答案 0 :(得分:2)

如果使用可视代码,则必须在cwd文件的configuration数组的lunch.json参数中设置工作目录。请参阅附件的屏幕截图。

enter image description here

答案 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进行操作,可能是在“项目”属性中设置了另一个“工作目录”?

Project Properties

如果通过命令行,则需要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"
});