如何在子文件夹下托管asp .net core应用程序

问题描述 投票:0回答:5

我有一个使用 Kestrel 在 Linux 上运行的 asp .net core 应用程序。

它绑定到端口 80 上的 ip ok。

但是 nginx 反向代理站点需要将应用程序托管在非根路径下,例如

http://somesite.com/myapp

所以这没关系,应用程序加载,但应用程序不知道 myapp 路径 - 因此尝试从根加载内容路径资源。 因此 css 资源等不会加载。

如何在运行时理想地配置应用程序以了解 url 路径。

更新:

我发现在 Startup.configure 中使用 app.UsePathBase("/myapp"); 有帮助,因为应用程序将处理此路径上的请求,但静态文件请求是 /myapp/images/example.jpg ,它返回 404。

图像文件夹位于 wwwroot 中 - 据我所知,这是 UseStaticFiles 的默认文件夹。

我希望请求能够理解 /myapp 实际上是虚拟的。

asp.net-core kestrel-http-server
5个回答
11
投票

好的 - 所以必须做两件事才能让应用程序在“虚拟目录”下运行:

在启动配置方法中,我必须设置应用程序的基本路径并指定静态文件的路径。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
 ...
 app.UseStaticFiles("/myapp");
 app.UsePathBase("/myapp");
 ...
}

该应用程序也从 / 运行 - 不确定这是否可取,但现在对我来说不是一个大问题。


6
投票

对于我(使用.NET Core 3.1)来说有点不同,使用 ScottC 的答案它无法找到静态文件,因为它在 my-app 目录的根目录中查找,而不是在 my-app/wwwroot 中

这个配置在 Startup.cs 中对我有用:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    ...
    if (env.IsDevelopment())
    {
        ...
    }
    else
    {
        ...
        app.UsePathBase("/my-app");
    }

    app.UseStaticFiles();
    ...

}


1
投票

斯科特C,

一旦您的网页内容位于 wwwroot 下,您必须在 Startup 类的配置部分添加 app.UseStaticFiles() 。

请参阅下面的示例:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseStaticFiles();
}

希望对您有帮助。


0
投票

除了设置

app.UsePathBase("/my-app");
之外,我要做的就是向
Program
添加一行:

     public static void Main(string[] args)
        {
            CreateHostBuilder(args)
#if !DEBUG
                .UseContentRoot(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location))
#endif
                .Build().Run();
        }

0
投票

对于 Net8,我发现:

UsePathBase()
放在路由和映射之前意味着您不需要更改
UseStaticFiles()
或其他任何内容。

app.UsePathBase("/myapp"); //<- must go before UseRouting()
app.UseRouting();
app.Map...()

对于 Blazor,您也想要;

app.MapBlazorHub("/myapp");

并编辑您的

App.razor
(对于 Net8 或更高版本)或
_Host.cshtml
(对于 Net 7)基础:

<!-- here you must have a trailing slash whereas in Program.cs you need to not have a trailing slash-->
<base href="/myapp/" />

Blazor 应用程序基本路径的 MS 文档(恕我直言,不是很清楚):https://learn.microsoft.com/en-us/aspnet/core/blazor/host-and-deploy/?view=aspnetcore-8.0&tabs=视觉工作室#app-base-path

© www.soinside.com 2019 - 2024. All rights reserved.