为请求事件设置用户名?

Kru*_*lur 2 azure azure-application-insights asp.net-core

我已经在基于 ASP.NET Core webhost 的 web 服务中实现了自定义身份验证方案。我想将 Application Insights 添加到此服务。

当我成功验证用户身份时,我会做这样的事情

telemetry.Context.User.Id = authenticatedUserName;
Run Code Online (Sandbox Code Playgroud)

telemetry对象是TelemetryClient我从依赖注入获得。

现在,问题是用户 ID 没有出现在请求中,我不知道为什么。

这有效

customEvents | where user_Id != "" and name  == "MyCustomEvent"
Run Code Online (Sandbox Code Playgroud)

但不是这个

request | where user_Id != ""
Run Code Online (Sandbox Code Playgroud)

或这个

dependencies | where user_Id != ""
Run Code Online (Sandbox Code Playgroud)

是否还有其他地方应该为请求设置用户 ID?我宁愿不为此创建自定义事件。

我也尝试UserHttpContext对象上设置属性,但它似乎没有任何效果。

Iva*_*ang 5

您应该将ITelemetryInitializer用于您的目的。

以下是我的测试步骤(asp.net core 2.1):

第 1 步:添加Aplication Insights telemetryby right click your project -> Add -> Application Insights telemetry。截图如下: 在此处输入图片说明

第 2 步:添加一个实现 ITelemetryInitializer 的新类:

using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.DataContracts;
using Microsoft.ApplicationInsights.Extensibility;

namespace WebApplication33netcore
{
    public class MyTelemetryInitializer: ITelemetryInitializer
    {
        public void Initialize(ITelemetry telemetry)
        {
            var request = telemetry as RequestTelemetry;
            if (request != null)
            {
                //set the user id here with your custom value
                request.Context.User.Id = "ivan111";
            }
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

第 3 步:在 Startup.cs 的 ConfigureServices 方法中注册遥测初始化程序。有关详细信息,请参阅此处

     public void ConfigureServices(IServiceCollection services)
     {
         services.Configure<CookiePolicyOptions>(options =>
         {

          options.CheckConsentNeeded = context => true;
          options.MinimumSameSitePolicy = SameSiteMode.None;
         });


         services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

         //Add the following code to register your telemetry initializer
         services.AddSingleton<ITelemetryInitializer>(new MyTelemetryInitializer());
    }
Run Code Online (Sandbox Code Playgroud)

第四步:查看测试结果:

在 Visual Studio Application Insights 搜索中: 在此处输入图片说明

然后在分析中检查它: 在此处输入图片说明