【问题标题】:asp.net-core - Set response's virtual path with middlewareasp.net-core - 使用中间件设置响应的虚拟路径
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-14
      • 1970-01-01
      • 1970-01-01
      • 2010-11-07
      • 1970-01-01
      相关资源
      最近更新 更多