在aspnet核心中获取应用程序虚拟基本路径

时间:2018-02-23 14:53:14

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

我知道它位于HttpContext.Request.PathBase,但是在我有HttpContext之前我需要它来配置我的Cookie(在Startup.cs中)。

我的问题:

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

这里有一点点困惑应该澄清。

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

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

您应该重新考虑您的用例,并检查您是否确实需要用于cookie配置的应用程序虚拟路径。它可能是XY problem。如果您仍然对cookie配置有疑问,请将其作为一个新问题制定,并附上您的方案的具体细节。

答案 2 :(得分:-1)

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

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