【问题标题】:AppDomainAppId in .NET Core?.NET Core 中的 AppDomainAppId?
【发布时间】:2021-04-30 15:29:58
【问题描述】:

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

我尝试了HttpRuntime.AppDomainAppPath equivalent in ASP.NET Core 的建议,但我的安装路径类似于C:/path/to/app,而不是上述路径。

如何获得上述路径或如何专门获得<site id> 部分?我可以从HostingEnvironment.ApplicationName 获得<servicename>,但不是我需要的<site id>

【问题讨论】:

    标签: c# asp.net asp.net-core .net-core


    【解决方案1】:

    AppDomain 不包含在 dotnet 核心中。查看Replacing AppDomain in .Net Core 了解迁移提示。

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


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

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

    【讨论】:

    • System.Web.Hosting.HostingEnvironment.ApplicationID 在.NET Core 中不存在我想,我可以在我的启动文件配置方法中使用 IHostingEnvironment,但是 HostingEnvironment 没有 ApplicationId。
    【解决方案2】:

    这听起来应该可行:

    DataProtectionUtilityExtensions.GetApplicationUniqueIdentifier(IServiceProvider)

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

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

    此 API 出于某种原因被明确隐藏。 Under the hood 它使用了IApplicationDiscriminator,它也被明确隐藏并表示不应该公开使用:) https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.dataprotection.infrastructure.iapplicationdiscriminator?view=aspnetcore-5.0

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

    【讨论】:

      猜你喜欢
      • 2016-10-07
      • 2022-01-07
      • 2021-06-06
      • 2017-02-23
      • 2016-11-10
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多