asp.net-core-使用中间件设置响应的虚拟路径

时间:2019-05-08 12:46:13

标签: c# asp.net asp.net-core virtual-directory virtual-path

设置

  • https://first-domain.com/托管的ASP.NET-Core Web应用程序
  • 使用负载平衡器将站点放置在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解析为/,因此客户端尝试访问{{1}处的资源}不存在。

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

问题

是否可以通过ASP.NET-Core middleware处理请求和/或响应,以便动态解析ASP.NET根路径(https://second-domain.com/some/path/myImage.png)?

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

1 个答案:

答案 0 :(得分:0)

这可以通过从中间件设置context.Request.PathBase来实现。