1

当我在 .NET 中获取 AppDomainAppId 时,我会得到类似的路径 /LM/W3C/<site id>/<servicename>,如何在 .NET Core 服务中获取完全相同的路径?

我尝试了ASP.NET Core 中等效的 HttpRuntime.AppDomainAppPath的建议,但我得到了我的安装路径C:/path/to/app,而不是如上所述的路径。

如何获得上述路径或如何专门获得<site id>零件?我可以得到<servicename>来自HostingEnvironment.ApplicationName但不是<site id>我需要的。

4

2 回答 2

1

AppDomain 不包含在 dotnet 核心中。查看在 .Net Core 中替换 AppDomain 以获取迁移提示。

使用 .NET 获得的路径看起来特定于 ASP.NET 的 AppDomain 实现。所以我认为你将无法通过 DNC 获得它。


System.Web/HttpRuntime.cs/Init中,我们可以看到_appDomainAppId = GetAppDomainString(".appId");

GetAppDomainString(string key)来电Thread.GetDomain().GetData(key);。该GetDomain方法与 AppDomains 直接相关。这些在 DNC 中不再存在。

于 2018-10-19T11:18:00.077 回答
0

这听起来应该有效:

DataProtectionUtilityExtensions.GetApplicationUniqueIdentifier(IServiceProvider)

https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.dataprotection.dataprotectionutilityextensions.getapplicationuniqueidentifier?view=aspnetcore-5.0

对于在这台机器上重复运行相同的应用程序,返回的标识符应该是稳定的。此外,该标识符仅在单个机器的范围内是唯一的,例如,两个不同机器上的两个不同应用程序可能返回相同的值。

由于某种原因,此 API 被显式隐藏。在它使用的引擎盖下,IApplicationDiscriminator它也被明确隐藏并说它不应该被公开使用:) https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.dataprotection.infrastructure.iapplicationdiscriminator?view =aspnetcore-5.0

实现仅基于主机环境ContentRootPath,但在 IIS 等上运行时可能还有其他实现......它们将返回与旧 AppDomainAppId 相同的值。

于 2021-04-30T07:29:58.463 回答