如何在Asp.net core中设置~/路径

3

这个回答:https://dev59.com/A2kv5IYBdhLWcg3wnCLH#10469032表明,如果应用程序在虚拟目录中,则URL中的~/将被设置为应用程序的实际根路径。

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

例如,我将应用程序置于Nginx反向代理后面,因此应用程序的根目录在这里:www.mywebsite.com/app1/

因此,我希望所有的~/都会展开成app1/。我该如何做到这一点?

我尝试在Startup.cs文件中的Configure方法中使用app.UsePathBase("/app1");,但好像没有任何效果。

我的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配置吗?另外,在你的设置中,~会被扩展成什么? - poke
@poke ~ 扩展到实际上什么都没有,它只是被删除了。 - 8176135
2个回答

2
~会扩展为内容根目录,这实际上是为传入请求配置的路径基础。 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/;
}

app.UsePathBase("/app1");

现在,访问/app1/foo的请求将被翻译为应用程序中相同的路径,将使用/app1路径作为基础,并且~应该正确扩展为/app1。"最初的回答"

0
原来错误确实在我的nginx配置中。
根据这里关于asp和nginx的文档:https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.2 我将我的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;
    }
...

~已正确扩展。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接