如何在子文件夹下托管ASP .NET Core应用程序

Sco*_*ttC 8 kestrel-http-server asp.net-core

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

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

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

http://somesite.com/myapp

这样就可以了,应用程序加载了,但是应用程序不知道myapp路径-因此尝试从根目录加载内容路径资源。因此,CSS资源等不加载。

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

更新:

我发现在Startup.configure中使用app.UsePathBase(“ / myapp”); 应用程式会提供协助,因为应用程式会在这个OK路径上处理要求-但静态档案要求则是/myapp/images/example.jpg,传回404。

images文件夹位于wwwroot中-据我所知是UseStaticFiles的默认文件夹。

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

Sco*_*ttC 6

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

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

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

该应用程序还可以从/运行-不确定是否可取,但对我而言这不是一个大问题。


Joh*_*n M 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();
    ...
Run Code Online (Sandbox Code Playgroud)

}


小智 1

斯科特·C,

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

请参阅下面的示例:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseStaticFiles();
}
Run Code Online (Sandbox Code Playgroud)

希望对您有所帮助。