【问题标题】:Get application virtual base path in aspnet core在 aspnet 核心中获取应用程序虚拟基本路径
【发布时间】:2018-02-23 14:53:14
【问题描述】:

我知道它位于 HttpContext.Request.PathBase,但是我需要它来配置我的 cookie,然后才能拥有任何 HttpContext(在 Startup.cs 中)。

我的问题:

当 devops 配置应用程序时,他们必须设置两次路径。一旦进入 IIS 应用程序(所以托管知道应该提供什么)和我的 appsettings.json(所以应用程序知道在哪里设置 cookie - 多个实例可以在服务器上工作)。我想在 IIS 中配置一次,并将配置传递给我的应用程序。

【问题讨论】:

标签: asp.net-core asp.net-core-mvc asp.net-core-2.0


【解决方案1】:

这里有一点困惑需要澄清一下。

您想知道应用程序启动时的应用程序虚拟路径。然而,应用程序虚拟路径是托管和特定请求的概念,而不是底层应用程序。托管服务使用此虚拟路径将传入 url 映射到应用程序根目录。在 IIS 中,您可以将多个虚拟路径映射到同一个物理目录,例如/myApp1 和 /myApp2 将指向同一个应用程序。您希望在应用程序启动时获得以下哪条路径?

这实际上是IHostingEnvironment 接口没有提供任何获取应用程序虚拟路径的属性的原因。应用程序处理请求时的另一件事。在这种情况下,请求特定的 URL,ASP.NET 可以在 HttpContext.Request.PathBase 中提供请求的虚拟路径。

您应该重新考虑您的用例并检查您是否真的需要应用程序虚拟路径来配置 cookie。可能是XY problem。如果您对 cookie 配置仍有疑问,请将其表述为一个新问题,并针对您的场景提供具体细节。

【讨论】:

  • /myApp1 and /myApp2 will point to the same application - 不,这将是应用程序的两个独立副本,具有共享的 contentRoot、配置等;每个都应该有正确的 PathBase。
  • 在问题中添加了问题描述。
  • 现在是IWebHostEnvironment
【解决方案2】:

您可以检查环境变量 ASPNETCORE_APPL_PATH。这是 AspNetCoreModule 提供的变量,以便可以正确设置 PathBase。见https://github.com/aspnet/IISIntegration/blob/df88e322cc5e52db3dbce4060d5bc7db88edb8e4/src/Microsoft.AspNetCore.Server.IISIntegration/WebHostBuilderIISExtensions.cs#L19

【讨论】:

  • 但是如果您使用的是原始 Kestrel 怎么办?
  • Kestrel 不再直接支持基本路径。
  • UsePathBase 还是个东西,不是吗?
  • 此环境变量仅在您使用 OutOfProcess 托管模型时才存在。如果您使用的是InProcess,则该信息仅存在于HttpRequest.PathBase 属性中。
【解决方案3】:

只需添加,您可以在 Javascript 中使用@Url.Content("") 来获取虚拟目录基本路径。

<script src="@Url.Content("~/app/myapp.js")" type="text/javascript"></script>

【讨论】:

    猜你喜欢
    • 2012-05-23
    • 2021-06-27
    • 1970-01-01
    • 2021-08-15
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    相关资源
    最近更新 更多