2

我正在努力完成以下场景:我需要为 Application Insights 创建一个自定义属性,其中包含用户的标识符(在登录时从数据存储中读取)。

浏览了几篇关于这个问题的文章,但它似乎不起作用。

到目前为止,我尝试了以下方法:

  1. 实现了一个自定义遥测初始化程序并将其加载到 Sitecore 管道中。这里的问题是我无法访问会话对象,因为它始终为NULL。经过一番研究,我意识到它甚至在会话创建之前就被触发了,所以我去了第二个选项。
  2. 尝试在 中加载遥测初始化程序HttpRequestProcessor,我能够访问会话,但之后永远不会触发 Initialize 方法。不能说我明白发生了什么。我TelemetryConfiguration.Active.TelemetryInitializers.Add(new UserIdTelemetryInitializer([injected_service]))在处理器的构造函数中添加了如下初始化程序,因此它只触发一次。

有人对我到底做错了什么有任何想法吗?如果您有一个适用于类似情况的代码示例,我将不胜感激。

如果您需要更多信息,请告诉我(可能太简短了)。

4

1 回答 1

1

ASP.NET MVC,您需要在启动或 Global.asax 时运行一次

Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration.Active.TelemetryInitializers.Add(new UserIdTelemetryInitializer());

UserIdTelemetryInitializer 的实现:

public class UserIdTelemetryInitializer : ITelemetryInitializer
{
    public void Initialize(Microsoft.ApplicationInsights.Channel.ITelemetry telemetry)
    {
        {
            if (HttpContext.Current?.Session == null)
                return;

            if (HttpContext.Current.Session["UserId"] == null)
            {
                HttpContext.Current.Session["UserId"] = Guid.NewGuid().ToString();
            }

            telemetry.Context.User.Id = (string)HttpContext.Current.Session["UserId"];
            telemetry.Context.Session.Id = HttpContext.Current.Session.SessionID;

            var authUser = _sessionManager.GetAuthenticatedUser<UserDetails>();
            if (authUser != null)
            {
                telemetry.Context.User.AuthenticatedUserId = authUser.UserId;
            }
        }

    }
}
于 2021-07-22T20:28:53.783 回答