使用 nginx 配置子路径访问 asp.net core 网站时,对 view 中路径生成的处理

这个问题是使用 docker 生成了 asp.net core 网站镜像,在使用 nginx 指向此镜像容器后,用的子路径虚拟路径,但是因为反向代理,asp.net core 并不认为是从子路径过来的,直接访问 controller 的 action 方法没问题,但是如果生成 view 内容时,view 再引用的资源路径就会错误。

在 nginx 中的配置:

复制代码
location /backstage/web/ {
    proxy_pass http://web-backstage/;
    proxy_set_header X_Real_IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_connect_timeout       600;
    proxy_send_timeout          600;
    proxy_read_timeout          600;
    send_timeout                600;
}
复制代码

解决方法(环境:.net core 3.1),修改 Startup.cs 配置:

复制代码
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    var pathBase = Environment.GetEnvironmentVariable("ASPNETCORE_APP_PATH");
    if (!string.IsNullOrWhiteSpace(pathBase))
    {
        Console.WriteLine("ASPNETCORE_APP_PATH:" + pathBase);
        
        //1、配置请求基地址(解决 view 的路径生成错误):
        app.Use((context, next) =>
        {
            context.Request.PathBase = pathBase;
            return next();
        });

        // 2、配置静态文件基地址(不配置的话,用上面生成的地址无法访问到静态文件):
        app.UsePathBase(pathBase);
    }
    // 正常使用静态文件
    app.UseStaticFiles();
}
复制代码

参考:

https://stackoverflow.com/questions/59202414/set-virtual-path-to-asp-net-core-mvc-application-behind-nginx-reverse-proxy

https://stackoverflow.com/questions/46593999/how-to-host-a-asp-net-core-application-under-a-sub-folder

posted @   不是豆豆  阅读(1013)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
友情链接:迷途


点击右上角即可分享
微信分享提示