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

时间:2017-10-05 20:10:40

标签: asp.net-core kestrel-http-server

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

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

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

http://somesite.com/myapp

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

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

更新

我在使用app.UsePathBase(" / myapp")的Startup.configure中找到了;帮助,因为应用程序将处理此路径上的请求确定 - 但静态文件请求然后是/myapp/images/example.jpg返回404。

images文件夹位于wwwroot中 - 默认为我理解为UseStaticFiles。

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

4 个答案:

答案 0 :(得分:4)

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

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

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

该应用程序也来自/同样 - 不确定这是否可取,但对我来说这不是一个大问题。

答案 1 :(得分:3)

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

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

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

    app.UseStaticFiles();
    ...

}

答案 2 :(得分:1)

ScottC,

一旦您的网站内容在wwwroot下,您必须在Startup类的configure部分添加app.UseStaticFiles()。

请参阅以下示例:

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

希望能帮助你。

答案 3 :(得分: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();
        }