url - 如何在 Asp.net Core 中设置 ~/path

标签 url asp.net-core razor

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

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

比如我有nginx反向代理后面的app,这样app的根就在这里:www.mywebsite.com/app1/

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

我在Startup.csConfigure方法中尝试了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 的东西?

最佳答案

~ 将扩展到内容根目录。这是为传入请求配置的有效路径基础。

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

关于url - 如何在 Asp.net Core 中设置 ~/path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56229402/

相关文章:

python - 如何在 Python 中使用 lxml 从网页查找所有(完整)子链接

c# - 我成功解析了 URL,但无法将字符串变量传递给方法 C#

html - MVC3- Razor : How to use html tag in ActionLink Name

python - 如何使用 python 从 url 中提取元描述?

html - 网址编码和HTML编码之间的区别

c# - 在 SPA 应用程序的 ASP.NET 5 中正确使用 AntiForgery token ?

asp.net - 在asp.net core中根据权限隐藏菜单

javascript - 对每个带有 class/id 的 div 使用 ajax

asp.net-mvc - 如何使用 ASP.net MVC、 Entity Framework 和 Razor 对模型进行补丁更新

javascript - jquery 自动完成 - 字符串数组