我使用Kestrel在Linux上运行了一个asp .net核心应用程序。
它绑定到端口80上的ip ok。
但是nginx反向代理站点需要在非根路径下托管应用程序,例如。
所以这没关系,应用程序加载,但应用程序不知道myapp路径 - 所以尝试从root加载内容路径资源。因此css资源等不会加载。
如何在运行时理想地配置应用程序以了解网址路径。
更新
我在使用app.UsePathBase(" / myapp")的Startup.configure中找到了;帮助,因为应用程序将处理此路径上的请求确定 - 但静态文件请求然后是/myapp/images/example.jpg返回404。
images文件夹位于wwwroot中 - 默认为我理解为UseStaticFiles。
我原本希望请求理解/ myapp实际上是虚拟的。
答案 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();
}