1

设置

  • ASP.NET-Core Web 应用程序托管在https://first-domain.com/
  • 使用负载平衡器将站点置于以下位置https://second-domain.com/some/path,以便请求将请求https://second-domain.com/some/path/Page1传递给https://first-domain.com/Page1
  • 转发请求时发送标头:
    • X-Original-Host = 'second-domain.com'
    • X-Original-BasePath = 'some/path'
    • X-Original-Url = 'https://second-domain.com/some/path/Page1'
  • 页面使用 ASP.NET 根路径字符 ( ~) 来引用相对于应用程序根的资源。
  • 使用ASP.NET-Core 中间件根据标头动态路由请求。

问题

我的中间件正确地将请求路由到页面。根据标头,请求https://second-domain.com/some/path/PageX正确检索https://first-domain.com/PageX.

但是,PageX使用 ASP.NET 根路径字符 ( ~) 的 URL 正在解析为,/因此客户端会尝试访问https://second-domain.com/不存在的资源。

例如,如果PageX.cshtml有一个<img src="~/myImage.png>标签,客户端的浏览器将尝试检索资源https://second-domain.com/myImage.png而不是https://second-domain.com/some/path/myImage.png

问题

有没有办法使用ASP.NET-Core 中间件来操作请求和/或响应,以便~动态解析ASP.NET 根路径 ( )?

换句话说,我正在尝试动态设置虚拟路径,而不使用通过 IIS/Azure 使用基础结构定义的虚拟路径。

4

1 回答 1

1

这可以通过context.Request.PathBase从中间件进行设置来完成。

于 2019-05-08T14:32:01.713 回答