【问题标题】:Static Files Cannot be Found After Publishing to Linux on ARM发布到 ARM 上的 Linux 后找不到静态文件
【发布时间】:2018-08-30 05:32:25
【问题描述】:

我有一个基于 ASP.NET Core 2.1 的 Web-API 项目。此 Web-API 必须从默认的 wwwroot 文件夹中传递静态文件。这适用于我的 Windows 机器上的以下代码(来自 Startup.cs)。

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseMvc()
        .UseStaticFiles();
    }
}

但是当我在 ARM (dotnet publish -r linux-arm) 上发布 Linux 项目并将其推送到测试系统时,浏览器无法检索静态文件。无论文件如何命名,服务器总是返回 HTTP 404,当然我在 Unix 系统上尊重大小写,所以它不应该是Asp.Net Core Web Application Static Files Gives 404 on Linux。

服务器进程可以读取 wwwroot 目录内容。我使用File.ReadAllText(<full path to file in wwwroot>)对此进行了测试。

服务器仅在 localhost 上运行,因此该项目不使用其他服务器,例如 ngingx。

【问题讨论】:

  • 我遇到了同样的问题,但我的解决方案是将我的 Index.html 重命名为 index.html。 Linux 似乎对文件的大小写更敏感,我不知道如何在 linux 上为 Kestrel 设置默认页面。
  • @Quintonn 是的,Unix 系统上使用的文件系统(通常)区分大小写。但这不是我的问题。

标签: c# .net-core asp.net-core-webapi


【解决方案1】:

我想我发现了,我做错了什么。我使用完整路径启动了 Web-API。相反,我必须先切换到应用程序目录。

工作:

cd /home/myuser/testapp
./testapp

不工作:

/home/myuser/testapp/testapp

我没有改变任何其他东西,我可以重现这个,所以首先切换到应用程序目录,似乎是必须的。

【讨论】:

  • 对于未来的我:如果您正在运行未发布的代码,那么 workdir 应该是 *.csproj 所在的位置,同时编译的工件位于 ./bin/{Debug|Release}/net5.0/{MyAssembly}.dll
猜你喜欢
  • 2012-11-05
  • 1970-01-01
  • 2019-06-12
  • 1970-01-01
  • 2012-07-16
  • 2017-11-08
  • 1970-01-01
  • 2019-11-29
  • 1970-01-01
相关资源
最近更新 更多