如何在Asp.net Core中设置〜/路径

时间:2019-05-20 23:37:12

标签: url asp.net-core razor

此答案:https://stackoverflow.com/a/10469032/3958875表示如果应用程序位于虚拟目录中,则URL中的~/将被设置为应用程序的实际根目录。

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

例如,我在nginx反向代理后面有该应用程序,因此该应用程序的根目录位于:www.mywebsite.com/app1/

因此,我希望将所有~/扩展为app1/。我该怎么做?

我在app.UsePathBase("/app1");的{​​{1}}方法中尝试了Configure,但似乎没有做任何事情。

我的nginx配置就像:

Startup.cs

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

2 个答案:

答案 0 :(得分:1)

~将扩展到内容根。这实际上是为传入请求配置的路径库。

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

答案 1 :(得分:0)

发现错误确实是在我的Nginx配置中。

按照此处有关asp和nginx的文档进行操作:https://docs.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;
    }
...

~正确展开。