Ядро asp.net не загружает статические файлы

У меня есть приложение .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();
    }

и моя папка структуры:

введите здесь описание изображения

но ни один из этих URL-адресов не открывает изображение:

"мой-веб-сайт.com/images/snes/alien.jpg"

"мой-веб-сайт.com/wwwroot/images/snes/alien.jpg"

"my-website.com/Assets/Snes/alien.jpg"

кто-нибудь знает, что не так?

Редактировать: Вот папка, полученная методом CurrentDirectoy() (по-видимому, правильно):

введите здесь описание изображения

Edit2: с этим кодом работайте на локальном хосте, но не когда я публикую на Azure:

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

person Paulo    schedule 14.01.2019    source источник
comment
какой у вас текущий рабочий каталог?   -  person Daniel A. White    schedule 14.01.2019
comment
Вы можете попробовать это? stackoverflow.com/a/47385434/495455   -  person Jeremy Thompson    schedule 14.01.2019
comment
Как вы публиковали в Azure? Не удалось воспроизвести вашу проблему, этот "my-website.com/Assets/Snes/alien.jpg" должен открыть это изображение. Вы получили ошибку 404 или что-то еще?   -  person Edward    schedule 15.01.2019


Ответы (3)


Скорее всего, вы находитесь в рабочем каталоге, который отличается от того, который вы думаете. Пожалуйста, проверьте это, установив точку останова на foo:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    var foo = Directory.GetCurrentDirectory();
}

Решение зависит от того, как вы запускаете приложение.

Если вы делаете это через Visual Studio, возможно, вы установили другой рабочий каталог в свойствах проекта?

Свойства проекта

Если через командную строку, вам нужно cd в корень вашего проекта.

Другим решением было бы использовать каталог вашей сборки:

// 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"
});
person Christian Gollhardt    schedule 14.01.2019
comment
видимо рабочий каталог правильный. Это на один уровень выше папки wwwroot. Я отредактировал сообщение, посмотрите изображение. - person Paulo; 14.01.2019

Если вы используете визуальный код, вам необходимо настроить рабочий каталог в параметре cwd массива configuration вашего файла lunch.json. Смотрите прикрепленный скриншот.

введите описание изображения здесь

person Dharmin Gheewala    schedule 27.02.2020

используйте 1_

app.UseStaticFiles(new StaticFileOptions
{
     FileProvider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, "Assets")),
            RequestPath = "/Assets"
});
person Seven    schedule 14.01.2019
comment
Я использую ASP.NET Core 3.1, и это сработало лучше всего для меня. - person meklarian; 17.02.2020