You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 7 Web API:如何避免向Application Insights发送非HTTP操作的匿名用户/会话ID

解决Application Insights非HTTP操作导致用户计数不准确的问题

问题原因

你的Telemetry Initializer仅在存在自定义请求头时设置用户/会话ID,但在非HTTP场景(如后台定时任务、非请求触发的遥测)下,HttpContext为空,初始化器会直接跳过设置。此时Application Insights会自动生成匿名的User ID和Session ID,这些匿名条目会被统计为新用户,导致用户计数虚高。

解决方案

通过以下两点优化初始化器逻辑,精准控制用户/会话ID的生成:

  1. 仅在HTTP请求场景下处理用户/会话ID
  2. 非HTTP场景直接清空用户/会话ID,避免自动生成匿名ID

修改后的TelemetryInitializer代码

public class TelemetryInitializer : ITelemetryInitializer
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public TelemetryInitializer(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

    public void Initialize(ITelemetry telemetry)
    {
        // 仅处理有HttpContext的HTTP请求场景
        var httpContext = _httpContextAccessor?.HttpContext;
        if (httpContext == null)
        {
            // 非HTTP场景清空ID,阻止AI生成匿名用户/会话
            telemetry.Context.User.Id = string.Empty;
            telemetry.Context.Session.Id = string.Empty;
            return;
        }

        // 尝试从请求头获取自定义会话ID
        if (!httpContext.Request.Headers.TryGetValue("MyHeader", out var customSessionId) || string.IsNullOrEmpty(customSessionId))
        {
            // 无自定义头的HTTP请求,按需清空ID(若需保留默认统计可注释此段)
            telemetry.Context.User.Id = string.Empty;
            telemetry.Context.Session.Id = string.Empty;
            return;
        }

        // 设置自定义用户/会话ID
        telemetry.Context.Session.Id = customSessionId;
        telemetry.Context.User.Id = customSessionId;
    }
}

额外说明

  • 若后台任务需要关联特定用户,不要依赖初始化器,可在发送遥测时手动设置ID:
    var telemetryClient = new TelemetryClient();
    telemetryClient.Context.User.Id = "目标用户ID";
    telemetryClient.Context.Session.Id = "目标会话ID";
    telemetryClient.TrackEvent("后台任务执行完成");
    
  • 如果你希望保留无自定义头的HTTP请求的默认用户统计,可删除无自定义头的HTTP请求部分的清空逻辑。

内容的提问来源于stack exchange,提问作者Striker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 20:22:41