You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP .Core MVC配置应用根URL 解决Nginx子路径部署资源404问题

解决方案

可以通过配置ASP.NET Core的请求基础路径(PathBase)实现,不需要硬编码业务代码,后续路径调整只需修改配置即可:

步骤1:配置应用基础路径

首先在app-2的配置文件(如appsettings.json)中新增路径配置项,避免硬编码:

{
  "AppSettings": {
    "BasePath": "/setup"
  }
}

然后在app-2的启动代码中注册PathBase中间件:

  • 如果你用的是.NET 6+的顶级语句模式(Program.cs):
var builder = WebApplication.CreateBuilder(args);
// 原有服务注册逻辑保持不变...

var app = builder.Build();

// 新增:配置基础路径,放在所有中间件注册的最前面
var basePath = builder.Configuration.GetValue<string>("AppSettings:BasePath");
if (!string.IsNullOrWhiteSpace(basePath))
{
    app.UsePathBase(basePath);
}

// 原有中间件注册逻辑(UseStaticFiles、UseRouting等)保持不变...
app.Run();
  • 如果你用的是.NET 5及更早版本的Startup.cs:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IConfiguration config)
{
    // 放在最前面注册
    var basePath = config.GetValue<string>("AppSettings:BasePath");
    if (!string.IsNullOrWhiteSpace(basePath))
    {
        app.UsePathBase(basePath);
    }

    // 原有逻辑保持不变...
}

完成这一步后,你现有cshtml中@Url.Content("~/css/app-2.css")的写法不需要修改,会自动解析为/setup/css/app-2.css。

步骤2:校验Nginx配置

确保你Nginx的分流配置符合要求,示例配置参考:

location /setup/ {
    # 注意末尾的斜杠,会自动移除/setup前缀后转发给app-2
    proxy_pass http://你app-2的内部监听地址/;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
}

同时建议在app-2中开启转发头支持,放在UsePathBase之后即可:

app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});

后续如果需要调整app-2的访问路径,只需要同步修改appsettings.json中的BasePath配置和Nginx的分流规则即可,不需要修改任何业务代码。


内容的提问来源于stack exchange,提问作者Jabbl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 19:15:03