Url 如何在Asp.net内核中设置~/路径

Url 如何在Asp.net内核中设置~/路径,url,asp.net-core,razor,Url,Asp.net Core,Razor,此答案:表示如果应用程序位于虚拟目录中,URL中的~/将设置为应用程序的实际根目录 但是,我似乎找不到如何设置此路径/值 例如,我在nginx reverse proxy后面有一个应用程序,因此应用程序的根在这里:www.mywebsite.com/app1/ 因此,我希望所有的~/都扩展到app1/。我怎样才能做到这一点 我尝试了app.UsePathBase(“/app1”),它似乎没有做任何事情 我的nginx配置如下所示: server { server_name: apps.myw

此答案:表示如果应用程序位于虚拟目录中,URL中的
~/
将设置为应用程序的实际根目录

但是,我似乎找不到如何设置此路径/值

例如,我在nginx reverse proxy后面有一个应用程序,因此应用程序的根在这里:
www.mywebsite.com/app1/

因此,我希望所有的
~/
都扩展到
app1/
。我怎样才能做到这一点

我尝试了app.UsePathBase(“/app1”)Startup.cs中的
Configure
方法中的code>,它似乎没有做任何事情

我的nginx配置如下所示:

server {
  server_name: apps.mywebsite.com
  location / {
    ...
  }
  location /app1/ {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_pass http://localhost:5000/;
  }
  #Https stuff ...
}

我是否缺少可以从nginx传递到asp.net的内容?

结果表明,错误确实存在于我的nginx配置中

通过以下有关asp和nginx的文档:

我将我的nginx配置更改为:

...
    location /app1/ {
        proxy_set_header X-Real-IP $remote_addr;
        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;
    }
...

~
正确展开。

~
将展开到内容根目录。这是为传入请求配置的基本路径

app.UsePathBase()
所做的是告诉应用程序当传入请求以指定的前缀开始时,该前缀将用作路径库。因此,在您的情况下,当传入请求以
/app1
开始时,
/app1
将是路径基,
~
将扩展到
/app1

但是,如果查看反向代理配置,可以看到路径
/app1
实际上没有传递给应用程序:

location /app1/ {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_pass http://localhost:5000/;
}
因此,当您在
/app1/foo
访问页面时,传递给应用程序的请求路径将只是
/foo
。因此,应用程序看不到
/app1
路径库,因此它将无法正确响应

实际上,您需要做的是将完整路径传递给应用程序。然后使用
app.UsePathBase()
配置该路径库,以便正确解释它:

location /app1/ {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_pass http://localhost:5000/app1/;
}

现在,
/app1/foo
上的传入请求将转换为应用程序中的同一路径,将使用
/app1
路径库,
~
应正确扩展到
/app1

您能显示nginx配置吗?另外,
~
在您的设置中扩展到什么?@poke~扩展到几乎没有,它只是被删除。
app.UsePathBase("/app1");