设置具有子目录的ASP Net Core应用程序



我正试图在子目录(http://<website>/app(中设置一个ASP Net Core应用程序,但我遇到了一个问题,该应用程序无法识别它的URL基础应该以/app/开头。因此,当我请求静态内容或操作时,它的作用就好像基础是"/"而不是"/app"。(例如:http://<website>/app/<static_content>是我需要的,但应用程序请求http://<website>/<static_content>(

NGINX是这样设置的:

server {
listen 80 default_server;
server_name <IP_Address>;
location /app/ {
proxy_pass         http://localhost:4000/;
proxy_http_version 1.1;
proxy_set_header   Upgrade $http_upgrade;
proxy_set_header   Connection keep-alive;
proxy_set_header   Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header   X-Forwarded-Proto $scheme;
}}

我的程序.cs

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseWebRoot(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot"))
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseUrls("http://localhost:4000");
}

我的startup.cs包含以下内容:

app.UsePathBase("/app");
app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), "wwwroot")),
RequestPath = "/app/wwwroot"
});

编辑:我通过删除proxy_pass上的结束斜杠来完成它!

server {
listen 80 default_server;
server_name <IP_Address>;
location /app1/ {
proxy_pass         http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header   Upgrade $http_upgrade;
proxy_set_header   Connection keep-alive;
proxy_set_header   Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header   X-Forwarded-Proto $scheme;
}
location /app2/ {
proxy_pass         http://localhost:5020;
proxy_http_version 1.1;
proxy_set_header   Upgrade $http_upgrade;
proxy_set_header   Connection keep-alive;
proxy_set_header   Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header   X-Forwarded-Proto $scheme;
}
}

这两款应用程序现在似乎都提出了正确的请求。

对于从//app的响应请求,请在Startup.cs中尝试以下代码

app.Map("/app",
subApp =>
{
subApp.UseStaticFiles();
subApp.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
);

Configure中的核心3.1确保您已设置app.UsePathBase("/api or whatever subdir");

最新更新