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?我宁愿不为此创建自定义事件。
我也尝试User在HttpContext对象上设置属性,但它似乎没有任何效果。
您应该将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 搜索中:

| 归档时间: |
|
| 查看次数: |
689 次 |
| 最近记录: |