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
。
我正尝试在我的 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
。