【发布时间】:2019-05-08 12:46:12
【问题描述】:
设置
- 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 middleware 根据标头动态路由请求。
问题
我的中间件正确地将请求路由到页面。根据标头,对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 middleware 操作请求和/或响应,以便动态解析 ASP.NET 根路径 (~)?
换句话说,我正在尝试动态设置虚拟路径,而无需通过 IIS/Azure 使用基础架构定义的虚拟路径。
【问题讨论】:
标签: c# asp.net asp.net-core virtual-directory virtual-path