Ядро asp.net не загружает статические файлы - PullRequest
0 голосов
/ 14 января 2019

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

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

"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: этот код работает на локальном хосте, но не когда я публикую на Azure:

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

Ответы [ 2 ]

0 голосов
/ 14 января 2019

использование IHostingEnvironment

app.UseStaticFiles(new StaticFileOptions
{
     FileProvider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, "Assets")),
            RequestPath = "/Assets"
});
0 голосов
/ 14 января 2019

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

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

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

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

Project Properties

Если через командную строку вам нужно 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"
});
...