asp.net core 3.1 + linux nginx 找不到资源(静态文件问题?)

resources not found with asp.net core 3.1 + linux nginx (static files problem?)

我正尝试在我的 raspberry pi 4 上 运行 应用程序 asp.net 核心 3.1 MVC。 该应用及其资源文件(img,css...)在 IIS 调试模式下运行良好(windows)。

我按照本教程设置了 linux 环境:tuto 该应用程序在 linux 中启动良好,但页面上没有资源。

所以我检查了有关静态文件的 Microsoft 文档页面:Static Files 和其他教程。大多数情况下,他们解释了如何更改资源目录路径,但这不是我的问题。我只是想先看看它与 wwwroot 一起使用。

如您所见,我在 startup.cs 中没有进行任何更改:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }
        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });
    }
}

都不在 program.cs 中:

public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }

nginx 配置文件内容:

server {
    listen        80 default_server;
    server_name   _;
    location / {
        proxy_pass         http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

请问您知道如何解决吗? 感谢阅读本文:)

问题已解决:静态文件应位于 /home/user 而不是我设置应用程序的位置

像这样配置您的 .service 文件:

[Unit]
Description=Example .NET Web API App running on Ubuntu

[Service]
WorkingDirectory=/home/username/dotnet/application_folder
ExecStart=/usr/bin/dotnet /home/username/dotnet/application_folder/bin/Debug/net5.0/application.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

我有同样的问题,静态文件总是在错误的文件夹中搜索。 Blazor 或 Nginx 中的配置更改没有帮助,没有发生任何区别。

如 AdrienM87 所述,解决方案是在它自己的文件夹中调用可执行文件 - 在我的例子中 /var/www/html